我尝试在类foo
中模拟以下方法MyClass
:
private Class<?> foo(final String str) throws ClassNotFoundException{
return Class.forName(str);
}
所以我写道:
MyClass pl = PowerMockito.spy(new MyClass());
try {
PowerMockito.when(pl, PowerMockito.method(MyClass.class, "foo", String.class))
.withArguments(anyString())
.thenReturn(Boolean.TRUE.getClass());
} catch (Exception e) {
e.printStackTrace(); // catch ClassNotFoundException
}
它不起作用并抛出异常java.lang.reflect.InvocationTargetException
。
但是,如果我在return Class.forName(str)
方法中用return Boolean.TRUE.getClass();
替换foo
- 一切正常。
如何告诉PowerMockito
调用在失败时抛出异常的方法foo
?
答案 0 :(得分:0)
MyClass pl = PowerMockito。 spy(new MyClass());
MyClass pl = PowerMockito。 mock(MyClass.claa);
并且您的代码无需任何更改即可运行,但spy / mock除外。
这样做:
MyClass pl = PowerMockito.spy(new MyClass());
try {
PowerMockito.doReturn(Boolean.TRUE.getClass())
.when(pl, PowerMockito.method(MyClass.class, "foo", String.class))
.withArguments(anyString());
} catch (Exception e) {
e.printStackTrace(); // catch ClassNotFoundException
}
但是,如果我将使用return替换返回Class.forName(str) Boolean.TRUE.getClass();在foo方法中 - 一切都很好。
这可以归功于1.它叫做一个真正的方法,2。你后退布尔类。但是当你使用anyString()调用它时会调用real方法并将null作为值传递。