这似乎不太可能,但是有没有办法以某种方式模拟静态方法,并以另一种方式第二次模拟静态方法?
一个案例场景——
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.
你不应该使用嘲笑来控制这样的"内部"。
通过控制到达该静态调用的字符串值,可以轻松控制待测试代码正在执行的操作。您希望测试为真;然后编写一个推入空字符串的测试;这期待一个例外。
你还有另一个不应该抛出的生产代码方法 - 然后编写另一个测试;并进行必要的设置。
但不要开始嘲笑这种方法。如果你认为你必须这样做,那么你的设计是不可测试的;换句话说:坏了!修复您的设计,而不是使用大嘲笑锤!