这似乎不太可能,但是有没有办法可以以某种方式模拟静态方法,然后以另一种方式第二次模拟静态方法?
案例场景 -
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.
最佳答案
您不应该使用模拟来控制此类“内部结构”。
您可以通过控制访问该静态调用的字符串值来轻松控制被测代码正在执行的操作。您希望测试结果为真;然后编写一个压入空字符串的测试;并且预计会有异常(exception)。
你有另一个不应该抛出的生产代码方法 - 然后编写另一个测试;并进行必要的设置。
但是不要开始 mock 此类方法。如果您认为必须这样做,那么您的设计就不可测试;换句话说:坏了!修复你的设计,而不是使用大锤子!
关于java - 如何在测试中以不同的方式模拟具有相同参数的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038803/