单元测试-使用Moq验证私有方法的执行

我想测试以下逻辑(这显然是我的方法的简化版本):

public void myPublicMethod(params) {

    if(some_condition)
        privateMethod1();
    else
        privateMethod2();
} 

我已经模拟了方法中的所有其他依赖项,并且已经进行了设置,以便可以保证some_condition为true.我想做的就是验证我的privateMethod1()刚被调用一次,而privateMethod2()根本没有被调用. Moq可以做到这一点吗?

以下是有关此问题的一些说明:

> privateMethod1()和privateMethod2()与myPublicMethod属于同一类,因此我无法为此类创建模拟对象.
> privateMethod1 / 2的主体都包含来自包含这些类和myPublicMethod的类的很多很多依赖项,因此将privateMethod1 / 2分解为自己的帮助器类将非常耗时

有什么想法吗?提前致谢.我愿意接受无法完成的工作,但是我想知道一种或另一种方式.

最佳答案
不要测试私有方法.它们是该类的私有实现细节.您应该只测试执行公共方法的结果.只要您的结果符合预期,就不必担心如何获得结果.

在私有方法上构建测试将导致脆弱的测试,当您重构私有实现时(出于性能或其他原因),这些测试很容易破坏.

转载注明原文:单元测试-使用Moq验证私有方法的执行 - 代码日志