我正在使用C#MOQ库。
假设我想为这段代码创建一个UnitTest
:
if(condition){
privateMethod();
}
else{
logger.info("didn't hit")
}
我想检查privateMethod
是否被点击,我不能使用Verify
功能,因为它是私有的。我怎么能这样做?
我考虑过添加一个专门用于单元测试的Status
成员,该成员将在退出测试方法之前保留最后一个位置。
答案 0 :(得分:8)
不要测试私人方法。它们是该类的私有实现细节。您应该只测试执行公共方法的结果。
正确设计的SOLID代码永远不会让您处于需要您进行私人模拟的位置。
根据您是否要更改设计,您可以采取的方法很少:
无论你选择哪种我都留给你。但是,我再一次强调它 - 模拟私有方法不是单元测试,库或工具问题 - 它是设计问题并且最好可以解决这样。
答案 1 :(得分:0)
我使用MSTest,这是我在Test Class中用来调用私有方法的解决方案:
Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);
它使用PrivateObject类