java - void 方法应使用哪个测试替身

标签 java unit-testing junit mockito junit4

我正在为包含以下内容的方法编写 JUnit 测试:

if (p.toString().contains("abc")) {
  cCreds(p);
  refMgr();
  p = new Path(Utils.rmvTkn(p.toString()));
}

cCreds(p);refMgr(); 调用 void 方法。我实际上并没有测试这些方法,但它们确实在我正在测试的方法中被调用,所以我必须以某种方式处理它们。我知道我需要某种测试替身,但我不确定是什么。我假设它没有使用 when().thenReturn(); 因为实际上没有返回任何内容。

有人可以建议吗?

编辑

我还应该提到,cCreds(p);refMgr(); 也是私有(private)的。

最佳答案

模拟并不是这里要做的事情。
正如这些方法:

cCreds(p);
refMgr();

成为被测类的一部分,您不必模拟它们。

模拟被测类的 publicprivate 方法不太自然。
它通常使测试变得更加脆弱且不太清晰。
Mockito 提供了 spy 概念来实现它,但它应该受到遗留代码的青睐。

在实际实现中,您应该检查的是该方法是否返回或执行了预期的副作用。
您没有显示该方法的完整代码,因此很难给出更具体的指针。

<小时/>

请注意,如果这些方法:

cCreds(p);
refMgr();

依赖一些您需要模拟的其他类来隔离被测组件,您可以重构代码以提取依赖类中的方法。
您可以通过以下方式调用它们:

foo.cCreds(p);
bar.refMgr();

你可以轻松地 mock 他们。

关于java - void 方法应使用哪个测试替身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289275/

相关文章:

java - 使用spring条件bean时如何指定单元测试

angular - SpyOn 调用方法的实际实现

python - 如何使用输入调用测试函数?

TDD session 期间出现 java.lang.AssertionError

junit - 预期注释类型

java - JSF 1.2 托管 Bean 中 @PersistenceContext 的含义

java.lang.ClassNotFoundException : org. eclipse.persistence.jpa.jpql.tools.spi.IManagedTypeProvider

testing - 在没有实现的情况下针对接口(interface)进行 JUnit 测试

java - 如何在 go 中使用 java

Java Web Start 无法自动下载并安装请求的版本