我不想明确命名我在invokeMethod()
参数中调用的方法。Powermock 提供了一个重载invokeMethod()
,它根据传递的参数推断方法。
invokeMethod(Object instance, Object... arguments)
我遇到的问题是我的第一个参数是String
. 这会调用invokeMethod()
带有签名的
invokeMethod(Object instance, String methodToExecute, Object... arguments)
这是一个测试模型...
@Test
public void thisIsATest() throws Exception{
TheClassBeingTested myClassInstance = new TheClassBeingTested();
String expected = "60";
String firstArgument = "123A48";
ReturnType returnedTypeValue = Whitebox.invokeMethod(myClassInstance, firstArgument, AnEnum.TypeA);
String actual = returnedTypeValue.getTestedField();
assertEquals("Expected should be actual when AnEnum is TypeA", expected, actual);
}
这给了我错误,
org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name '123A48' with parameter types: [ AnEnum ] in class TheClassBeingTested.`
我通过将第一个参数的类型更改为 来让它工作Object
,但这对我来说感觉很脏。
@Test
public void thisIsATest() throws Exception{
TheClassBeingTested myClassInstance = new TheClassBeingTested();
String expected = "60";
Object firstArgument = "123A48";
ReturnType returnedTypeValue = Whitebox.invokeMethod(myClassInstance, firstArgument, AnEnum.TypeA);
String actual = returnedTypeValue.getTestedField();
assertEquals("Expected should be actual when AnEnum is TypeA", expected, actual);
}
有没有正确的方法将String
类型作为第一个参数传递,而不是将我的方法名称硬编码到invokeMethod()
调用中?我在 Powermock 文档或论坛中没有找到任何解决此问题的内容,但它肯定不会那么罕见。