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