【发布时间】:2012-07-12 03:21:50
【问题描述】:
我正在尝试测试这个方法:
[Test]
public void Test_GetReferenceValue()
{
Person person= new Person() { Name = "PJ" };
PersonalProperty<Person> personalProperty = new PersonalProperty<Person>();
var result = personalProperty.GetReferenceValue(person);
Assert.AreEqual("PJ", result);
}
GetReferenceValue 方法的实现如下:
public override object GetReferenceValue(TOwner owner)
{
Person value = this.Accessor(owner);
if (value == null)
return null;
else
return value.Name;
}
我试图找到 Accessor 属性的来源,但我在另一个程序集中找到了它:
public class PersonalProperty<TOwner> : Property<TOwner, Person>
where TOwner : class
{
public virtual Func<TOwner, TProperty> Accessor { get; internal set; }
}
只要我能将代码放入我的测试中,我上面的测试就会完美运行:
personalProperty.Accessor = p =>p;
这是为 Func 委托定义/方法。但是,我不能这样做,因为 Accessor 是在内部设置的。意思是,如果我在另一个程序集中(我现在就是),我无法设置它。我不能成为访问器程序集的朋友,因为我不允许更改任何代码。我只被允许在另一个项目/程序集中创建测试。
那么我将如何测试 GetReferenceValue?反射有帮助吗?
【问题讨论】:
标签: c# unit-testing reflection internal func