我正在尝试测试这种方法:
[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?反思有帮助吗?