Ich habe ein Problem mit dem Zugriff auf eine private Methode beim Testen.
Die zu testende Methode sieht so aus:
Und der Zugriff aus der Testklasse sieht so aus:
[java=2056] private String callPrivateMethodCutOut(String input, int start, int end) {
String ergebnis = null;
try {
Class<?> clazz = Analyser.class;
Method method = clazz.getDeclaredMethod("cutOut", String.class,
int.class, int.class);
method.setAccessible(true);
//ergebnis = (String) method.invoke(input, start, end);
Object o = method.invoke(input, start, end);
ergebnis = (String) o;
}
catch (Exception e) {
e.printStackTrace();
}
return ergebnis;
}
[/code]
Die Fehlermeldung lautet:
Wie man sieht, kann [c]method[/c] korrekt ermittelt und der Zugang umgesetzt werden. Der Fehler tritt erst beim Aufruf [c]method.invoke(input, start, end)[/c] auf. Hat jemand eine Idee, warum?
Die zu testende Methode sieht so aus:
Java:
class Analyser {
...
private String cutOut(String text, int start, int end) {
...
}
...
}
Und der Zugriff aus der Testklasse sieht so aus:
[java=2056] private String callPrivateMethodCutOut(String input, int start, int end) {
String ergebnis = null;
try {
Class<?> clazz = Analyser.class;
Method method = clazz.getDeclaredMethod("cutOut", String.class,
int.class, int.class);
method.setAccessible(true);
//ergebnis = (String) method.invoke(input, start, end);
Object o = method.invoke(input, start, end);
ergebnis = (String) o;
}
catch (Exception e) {
e.printStackTrace();
}
return ergebnis;
}
[/code]
Die Fehlermeldung lautet:
Code:
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at data.AnalyserTest.callPrivateMethodCutOut(AnalyserTest.java:2064)
at data.AnalyserTest.cutOut1(AnalyserTest.java:2076)
...
Wie man sieht, kann [c]method[/c] korrekt ermittelt und der Zugang umgesetzt werden. Der Fehler tritt erst beim Aufruf [c]method.invoke(input, start, end)[/c] auf. Hat jemand eine Idee, warum?