[英]Mocking static method that returns void with PowerMock does not work
我尝试了所有有关类似问题的答案,但无法使其正常工作(例如This )
我有这个课(简体)
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(...
Stubber类型中的when(T)方法不适用于参数(void)
如果我使用PowerMokito.doNothing()。when(...
PowerMockitoStubber类型的when(Class)方法不适用于参数(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));
}
第一个参数是被测类的类实例,第二个参数是您要模拟的方法名称,后跟该方法的参数。
确保您导入org.powermock.api.mockito.PowerMockito.doNothing
而不是org.mockito.Mockito.doNothing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.