模拟 returns void with PowerMock 的静态方法不起作用
Mocking static method that returns void with PowerMock does not work
我尝试了所有关于类似问题的答案,但我无法解决问题(比如 This)
我有这个class(简体)
public class ItemParametersParser
{ ...
public static void writeToFile(Item i, Context c, Builder b) throws HandlerException
}
我正在尝试模拟 writeToFile 方法但没有成功
@RunWith(PowerMockRunner.class)
@PrepareForTest({ItemParametersParser.class})
public class MyTest {
@Test
public void test() throws ... {
mockStatic(ItemParametersParser.class);
doNothing().when(ItemParametersParser.class);
ItemParametersParser.writeXMLToFile(null,null,null);
...
}
这个结果是用原来的方法
我还尝试使用以下方法模拟特定方法:
doNothing().when(ItemParametersParser.writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class)));
但我收到此错误 doNothing.when(...
The method when(T) in the type Stubber is not applicable for the arguments (void)
或者如果我使用 PowerMokito.doNothing().when(...
The method when(Class) in the type PowerMockitoStubber is not applicable for the arguments (void)
使用 doAnswer 也无效
编辑:
如@pvpkiran 所述,在解决导入问题后,它现在可以工作了!我可以使用 doAnswer 验证它。
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
您的 when
方法应该在对象上:
ItemParametersParser itemParametersParser= mock(ItemParametersParser.class);
doNothing().when(itemParametersParser).writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class));
这应该有效
@Test
public void test() throws .... {
mockStatic(ItemParametersParser.class);
doNothing().when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
}
第一个参数是被测 class 的 class 实例,第二个参数是要模拟的方法名称,后跟方法的参数。
确保导入 org.powermock.api.mockito.PowerMockito.doNothing
而不是 org.mockito.Mockito.doNothing
我尝试了所有关于类似问题的答案,但我无法解决问题(比如 This)
我有这个class(简体)
public class ItemParametersParser
{ ...
public static void writeToFile(Item i, Context c, Builder b) throws HandlerException
}
我正在尝试模拟 writeToFile 方法但没有成功
@RunWith(PowerMockRunner.class)
@PrepareForTest({ItemParametersParser.class})
public class MyTest {
@Test
public void test() throws ... {
mockStatic(ItemParametersParser.class);
doNothing().when(ItemParametersParser.class);
ItemParametersParser.writeXMLToFile(null,null,null);
...
}
这个结果是用原来的方法 我还尝试使用以下方法模拟特定方法:
doNothing().when(ItemParametersParser.writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class)));
但我收到此错误 doNothing.when(...
The method when(T) in the type Stubber is not applicable for the arguments (void)
或者如果我使用 PowerMokito.doNothing().when(...
The method when(Class) in the type PowerMockitoStubber is not applicable for the arguments (void)
使用 doAnswer 也无效
编辑: 如@pvpkiran 所述,在解决导入问题后,它现在可以工作了!我可以使用 doAnswer 验证它。
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
您的 when
方法应该在对象上:
ItemParametersParser itemParametersParser= mock(ItemParametersParser.class);
doNothing().when(itemParametersParser).writeXMLToFile(any(Item.class),any(Context.class),any(Builder.class));
这应该有效
@Test
public void test() throws .... {
mockStatic(ItemParametersParser.class);
doNothing().when(ItemParametersParser.class, "writeToFile", any(Item.class), any(Context.class),any(Builder.class));
}
第一个参数是被测 class 的 class 实例,第二个参数是要模拟的方法名称,后跟方法的参数。
确保导入 org.powermock.api.mockito.PowerMockito.doNothing
而不是 org.mockito.Mockito.doNothing