void方法应该使用哪个测试双

时间:2018-01-16 20:26:27

标签: 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();也是私有的。

2 个答案:

答案 0 :(得分:2)

这里没有必要做嘲讽 正如这些方法:

cCreds(p);
refMgr();

参加考试的一部分,你不必被迫嘲笑他们。

模拟被测班级的publicprivate方法并不是很自然 它通常使测试更脆弱,更不清晰 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();

来源:http://www.baeldung.com/mockito-void-methods