如何使用私有返回类型测试私有方法?

时间:2018-10-21 19:15:44

标签: c# .net unit-testing testing

我正在使用PrivateObject在我的一个班级中测试私有方法(,请不要进行有关不测试私有方法的演讲。我选择这样做。)然后如果返回值是基本的内置类型,请使用Assert.AreEqual()测试私有方法的返回值。但是,如果我的私有方法返回的值本身就是私有结构,该怎么办?

[TestMethod]
public void TestPrivateMethod1() {
    using (Interactors.Interactor interactor = new Interactors.Interactor()) {
        var priv = new PrivateObject(interactor);
        var privateType = priv.Invoke("myPrivateMethod", "foo");
        Assert.AreEqual(12, privateType.SomeValue);
    }
}

在这种情况下,私有结构在Interactors.Interactor类内定义,并返回到变量privateType中。但是由于测试方法不知道,我显然无法编译其中带有privateType.SomeValue的代码。如何测试私有返回类型的值?

1 个答案:

答案 0 :(得分:1)

PrivateObject使用反射来操纵私有类型。只需使用它即可获取您的价值:

Assert.AreEqual(12, new PrivateObject(privateType).GetFieldOrProperty("SomeValue"));

这是非常冗长的。令我惊讶的是,没有包装使用dynamic关键字。