我的项目有一些单元测试,我们希望能够设置一些具有私有setter属性的属性。目前我是通过反射和这个扩展方法来实现的:
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);
我该如何做到这一点?