如何通过反射将方法参数 com.ibm.as400.access.AS400JDBCConnection 传递给以下方法:
private String test1(Connection con){
return "test1";
}
当我从 JUnit 传递到 test1(con) 时,出现以下错误。java.lang.NoSuchMethodException: com.action.TestAction.test1(com.ibm.as400.access.AS400JDBCConnection)
我创建了另一种方法:
private String test2(com.ibm.as400.access.AS400JDBCConnection con){
return "test2";
}
使用 test2(con) 运行,它运行良好。在不改变方法的情况下正确传递到 test1 的任何输入将不胜感激。
==================================================== ========
以下是我从中提取的示例链接: Any way to Invoke a private method?
以下是我的 JUnit 测试:
@Test
public void testReturnScreen(){
System.out.println("connection: "+con.getClass());
System.out.println((String) genericInvokMethod(creditCardAction, "test2", 1, con));
System.out.println((String) genericInvokMethod(creditCardAction, "test1", 1, con));
}
public static Object genericInvokMethod(Object obj, String methodName,
int paramCount, Object... params) {
Method method;
Object requiredObj = null;
Object[] parameters = new Object[paramCount];
Class<?>[] classArray = new Class<?>[paramCount];
for (int i = 0; i < paramCount; i++) {
parameters[i] = params[i];
classArray[i] = params[i].getClass();
}
try {
method = obj.getClass().getDeclaredMethod(methodName, classArray);
method.setAccessible(true);
requiredObj = method.invoke(obj, parameters);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return requiredObj;
}