我正在尝试编写一个实用方法来允许在被测类中轻松调用私有方法。我所拥有的是:
private Object callPrivateMethod(String methodName, Object subject, Object... parameters) {
try {
Class<?>[] paramTypes = new Class<?>[parameters.length];
for (int index=0; index<parameters.length; index++) {
paramTypes[index] = parameters[index].getClass();
}
Method method = subject.getClass().getDeclaredMethod(methodName, paramTypes);
method.setAccessible(true);
return method.invoke(subject, parameters);
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
return null;
}
}
但是当我尝试使用此代码调用它时:
List<Session> sessions = new ArrayList<Session>();
// fill the array list
String sessionLines = (String) callPrivateMethod("getSessionsForEmail", emailSender, sessions);
我得到这个例外:
java.lang.NoSuchMethodException: staffing.server.email.EmailSender.getSessionsForEmail(java.util.ArrayList)
EmailSender(被测类)中的方法签名如下所示:
private String getSessionsForEmail(List<Session> sessions) {
//do stuff
}
试图弄清楚为什么反射找不到方法。与 List 和 ArrayList 不是完全相同的类有关吗?如果是这样,我该怎么办?