テスト対象のクラスでプライベート メソッドを簡単に呼び出せるようにするユーティリティ メソッドを作成しようとしています。私が持っているのはこれです:
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 がまったく同じクラスではないことに何か関係がありますか? もしそうなら、私は何ができますか?