unit-testing - 使用 Moq 验证私有(private)方法的执行

标签 unit-testing mocking moq private-members

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

public void myPublicMethod(params) {

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

我模拟了该方法中的所有其他依赖项,并且我已经进行了设置,以便我可以保证 some_condition 为 true。我想要做的是验证我的 privateMethod1() 是否被调用一次,而 privateMethod2() 根本没有被调用。这可能与起订量有关吗?

以下是有关该问题的一些注释:

  • privateMethod1() 和 privateMethod2() 与 myPublicMethod 位于同一类中,因此我无法为此类创建模拟对象。
  • privateMethod1/2 的主体都包含来自包含这些方法和 myPublicMethod 的类的许多依赖项,因此将 privateMethod1/2 分解为它们自己的帮助程序类将非常耗时

有什么想法吗?提前致谢。我愿意接受这是不可能做到的,但我想知道一种或另一种方式。

最佳答案

不要测试私有(private)方法。它们是类的私有(private)实现细节。您应该只测试执行公共(public)方法的结果。只要你的结果符合预期,你就不应该关心结果是如何获得的。

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

关于unit-testing - 使用 Moq 验证私有(private)方法的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847463/

相关文章:

unit-testing - 使用 Groovy AST 转换时的代码覆盖率指标

javascript - 在 Jasmine 中 mock xhr 调用

python - 为什么 python 的 monkeypatch 在导入类而不是模块时不起作用?

asp.net - ASP.NET HttpException.GetHttpCode()返回0

c# - 如何模拟在单元测试函数中使用的 SmtpClient 对象

cocoa - OCMock 与 Core Data 动态属性问题

C#:保护级别错误

python - 在 Python 中,是否有模拟 httplib 响应的库?

ruby - 如何重置对模拟类方法的期望?

unit-testing - Moq-ing 类或接口(interface)有什么区别?