C#单元测试 - 检查是否达到了私有方法

时间:2017-06-05 07:54:42

标签: c# moq

我正在使用C#MOQ库。

假设我想为这段代码创建一个UnitTest

if(condition){
    privateMethod();
}
else{
    logger.info("didn't hit")
}

我想检查privateMethod是否被点击,我不能使用Verify功能,因为它是私有的。我怎么能这样做?

我考虑过添加一个专门用于单元测试的Status成员,该成员将在退出测试方法之前保留最后一个位置。

2 个答案:

答案 0 :(得分:8)

不要测试私人方法。它们是该类的私有实现细节。您应该只测试执行公共方法的结果。

  

正确设计的SOLID代码永远不会让您处于需要您进行私人模拟的位置。

根据您是否要更改设计,您可以采取的方法很少:

  • 不要试图模仿私人信息,专注于公共API(对设计问题没有帮助)
  • 将私有方法提取到类,引入依赖(长期解决方案,改进设计并使代码易于测试)
  • 保护私有方法,在测试中覆盖(不帮助解决设计问题,可能不会产生有价值的测试)

无论你选择哪种我都留给你。但是,我再一次强调它 - 模拟私有方法不是单元测试,库或工具问题 - 它是设计问题并且最好可以解决这样。

答案 1 :(得分:0)

我使用MSTest,这是我在Test Class中用来调用私有方法的解决方案:

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);

它使用PrivateObject