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プロパティ用意した?