我的项目中有一些静态 util 方法,其中一些只是传递或抛出异常。有很多关于如何模拟返回类型不是 void 的静态方法的示例。但是我如何模拟一个将 void 返回为“doNothing()
”的静态方法呢?
非 void 版本使用以下代码行:
@PrepareForTest(StaticResource.class)
...
PowerMockito.mockStatic(StaticResource.class);
...
Mockito.when(StaticResource.getResource("string")).thenReturn("string");
但是,如果应用于返回 void
的 StaticResources
,编译器会提示 when(T)
不适用于 void。 .
有什么想法吗?
一种解决方法可能是让所有静态方法返回一些 Boolean
以获得成功,但我不喜欢解决方法。
最佳答案
您可以像这样 stub 静态 void 方法:
PowerMockito.doNothing().when(StaticResource.class, "getResource", anyString());
虽然我不确定你为什么要麻烦,因为当你调用 mockStatic(StaticResource.class) 时,StaticResource 中的所有静态方法默认都会被 stub
更有用的是,您可以捕获传递给 StaticResource.getResource() 的值,如下所示:
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
PowerMockito.doNothing().when(
StaticResource.class, "getResource", captor.capture());
然后您可以像这样评估传递给 StaticResource.getResource 的字符串:
String resourceName = captor.getValue();
关于static - 如何使用 PowerMock 模拟返回 void 的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9585323/