从模拟对象访问私有成员

时间:2016-12-13 16:43:32

标签: c# unit-testing integration-testing

在我的项目中,我们有一个测试数据存储库,用于集成测试。然后,此存储库用于创建可通过测试方法调用的模拟工作单元。我在尝试访问执行断言时遇到问题。

我想断言的数据保存在source

enter image description here

我一直在寻求使用反射访问非公开成员,但以下内容返回null

PropertyInfo pInfo = vms.GetType().GetProperty("SourceInterface", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

SourceInterface替换source也会返回null

有没有办法可以从SourceInterface检索source个对象?

编辑: 测试方法:

[TestMethod]
public void GetAllVMS_VMSReturned()
{
    IEnumerable<SourceInterface> vms = controller.GetAllVMS();
    Assert.IsTrue(vms.ToList().Count > 0); //Throws NullReferenceException 
}

待测方法:

public IEnumerable<SourceInterface> GetAllVMS()
{
    return database.SourceInterfacesRepository.GetAll();
}

1 个答案:

答案 0 :(得分:1)

source不是属性,而是字段。这样做:

FieldInfo[] privateFields = vms.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

然后,您可以根据需要过滤privateFields