私のプロジェクトには、プライベートセッターを持ついくつかのプロパティを設定できるようにしたいユニットテストがいくつかあります。現在、私はリフレクションとこの拡張メソッドを介してそれを行っています:
public static void SetPrivateProperty(this object sourceObject, string propertyName, object propertyValue)
{
sourceObject.GetType().GetProperty(propertyName).SetValue(sourceObject, propertyValue, null);
}
私がこのようなTestObjectを持っていると仮定します:
public class TestObject
{
public int TestProperty{ get; private set; }
}
次に、ユニットテストでこれを次のように呼び出すことができます。
myTestObject.SetPrivateProperty("TestProperty", 1);
ただし、コンパイル時にプロパティ名を検証したいので、次のように式を介してプロパティを渡せるようにします。
myTestObject.SetPrivateProperty(o => o.TestProperty, 1);
これどうやってするの?