setできないsetプロパティ

気がつけば一年近くも何も書いてなかったとは我ながら呆れる。


さて本題。ド嵌り系の内容です。


某社のお手伝いで単体テストコードを書いた時のこと。
使用する先方のライブラリのソースは提供されていない状態だったので、クラスの提供しているインターフェースを確認するためVisualStudioでClassAという名前を右クリックし、[定義へ移動]でメタデータから確認すると

public class ClassA
{
	public ClassA();// デフォルトコンストラクタのみpublic ClassB BProperty { get; set; }
	public ClassC CProperty { get; set; }
}

こんな感じだった。


んで単体テストコードで

ClassA a = new ClassA();
ClassB b = new ClassB();
a.BProperty = b;

Assert.AreEqual( b, a.BProperty);// 一応確認

のような感じのテストを書いてNUnitでテストしたら失敗するわけだ。

Expected : bの内容
But was : null

全く意味がわからん。


他のコードを全部取っ払って、本当に上記だけ記述したテストを作ってみてもやはり同様。

But was : null

というメッセージが出ている以上「何も」セットできていない。


先方に問い合わせた結果、
「BPropertyのsetの内部実装は空である」
「ClassCのプロパティでClassBを設定できるのでClassC作ってそこにClassBを設定して、それをClassAに設定して下さい」とのこと。


ってことは内部実装は

    public ClassB BProperty {
        get { return c_member.BProperty; }
        set {}
    }

って感じになってるのか。


久々に脱力。
なぜsetプロパティ用意した?