如何在测试中以不同的方式模拟具有相同参数的静态方法



这似乎不太可能,但是有没有办法以某种方式模拟静态方法,并以另一种方式第二次模拟静态方法?

一个案例场景——

if(StringUtils.isEmpty("")) {
   throw Exception();
}
...
if(StringUtils.isEmpty("")) {
   doSomething();
}

测试按以下方式编写。

mockStatic(StringUtils.class);
when(StringUtils.isEmpty("")).thenReturn(false);
/*Is it possible to make this behaviour run only once such that second time
when it is called we can mock it again.*/
limitStaticMock(times(1));//Is this possible?
when(StringUtils.isEmpty("")).thenReturn(true);//Setting behaviour again.

你不应该使用嘲笑来控制这样的"内部"。

通过控制到达该静态调用的字符串值,可以轻松控制待测试代码正在执行的操作。您希望测试为真;然后编写一个推入空字符串的测试;这期待一个例外。

你还有另一个不应该抛出的生产代码方法 - 然后编写另一个测试;并进行必要的设置。

不要开始嘲笑这种方法。如果你认为你必须这样做,那么你的设计是不可测试的;换句话说:坏了!修复您的设计,而不是使用大嘲笑锤!

相关内容

  • 没有找到相关文章

最新更新