我正在使用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
的代码。如何测试私有返回类型的值?
答案 0 :(得分:1)
PrivateObject
使用反射来操纵私有类型。只需使用它即可获取您的价值:
Assert.AreEqual(12, new PrivateObject(privateType).GetFieldOrProperty("SomeValue"));
这是非常冗长的。令我惊讶的是,没有包装使用dynamic
关键字。