我正在为包含以下内容的方法编写一个 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();
也是私人的。
这里不需要嘲笑。
作为这些方法:
cCreds(p);
refMgr();
成为被测试类的一部分,您不必嘲笑他们。
嘲笑被测类的public
或private
方法不是很自然。
它通常使测试更脆,更不清晰。
Mockito提供了spy
概念来实现它,但它应该受到遗留代码的青睐。
在实际实现中,您应该检查的是该方法是否返回或执行预期的副作用。
您不显示方法的整个代码,因此很难给出更具体的指针。
请注意,如果这些方法:
cCreds(p);
refMgr();
依靠需要模拟的其他一些类来隔离受测组件,可以重构代码以提取依赖类中的方法。
您将以这种方式调用它们:
foo.cCreds(p);
bar.refMgr();
你可以很容易地嘲笑他们。
使用 Mockito 中的 doNothing()
API 来模拟 void 方法
doNothing().when(mock).cCreds(p);
doNothing().when(mock).refMgr();
来源: http://www.baeldung.com/mockito-void-methods