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

omr*_*n12 0 c# moq

我正在使用C#MOQ库.

让我们说我想UnitTest为这段代码创建一个:

if(condition){
    privateMethod();
}
else{
    logger.info("didn't hit")
}
Run Code Online (Sandbox Code Playgroud)

我想检查是否privateMethod被击中,我不能使用该Verify功能,因为它是私人的.我怎样才能做到这一点?

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

小智 8

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

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

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

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

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