我正在为包含以下内容的方法编写 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();
成为被测类的一部分,您不必模拟它们。
模拟被测类的 public
或 private
方法不太自然。
它通常使测试变得更加脆弱且不太清晰。
Mockito 提供了 spy
概念来实现它,但它应该受到遗留代码的青睐。
在实际实现中,您应该检查的是该方法是否返回或执行了预期的副作用。
您没有显示该方法的完整代码,因此很难给出更具体的指针。
请注意,如果这些方法:
cCreds(p);
refMgr();
依赖一些您需要模拟的其他类来隔离被测组件,您可以重构代码以提取依赖类中的方法。
您可以通过以下方式调用它们:
foo.cCreds(p);
bar.refMgr();
你可以轻松地 mock 他们。
关于java - void 方法应使用哪个测试替身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289275/