static - 如何使用 PowerMock 模拟返回 void 的静态方法?

标签 static mocking mockito void powermock

我的项目中有一些静态 util 方法,其中一些只是传递或抛出异常。有很多关于如何模拟返回类型不是 void 的静态方法的示例。但是我如何模拟一个将 void 返回为“doNothing()”的静态方法呢?

非 void 版本使用以下代码行:

@PrepareForTest(StaticResource.class)

...

PowerMockito.mockStatic(StaticResource.class);

...

Mockito.when(StaticResource.getResource("string")).thenReturn("string");

但是,如果应用于返回 voidStaticResources,编译器会提示 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/

相关文章:

java - 如何使静态日历线程安全

java - 如何在 Java (jUnit4) 中轻松模拟出静态方法

c# - 如何对 MVC UserViewControl 进行单元测试?

java - 使用 powermockito 验证静态 void 方法的调用

java - Mockito 和 Spring Autowiring

java - 子类访问静态成员的规则是什么?

.net - 在 C++/CLI 中创建时初始化静态字典

java - 如何测试是否使用正确的参数调用了方法?

unit-testing - Play Framework 2 scala specs2 mockito,如何编写模拟单元测试