Wie verwende ich Powermock die Whitebox.invokeMethod(Object Instanz, Object... arguments), als meine erste parameter der Methode ist der String-Typ?
Möchte ich nicht explizit den Namen der Methode, die ich bin-Anrufung in der invokeMethod()
Argumente. Powermock bietet eine überladene invokeMethod()
folgert, dass die Methode basierend auf den übergebenen Parametern.
invokeMethod(Object instance, Object... arguments)
Das problem, das ich laufen werde ist, dass meine erste parameter ist der Typ String
. Dies ruft die invokeMethod()
mit der Unterschrift,
invokeMethod(Object instance, String methodToExecute, Object... arguments)
Hier ist ein Modell der test...
@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);
}
Dieser gibt mir die Fehlermeldung,
org.powermock.reflect.exceptions.MethodNotFoundException: No method found with name '123A48' with parameter types: [ AnEnum ] in class TheClassBeingTested.`
Ich habe es zu arbeiten, ändern Sie den ersten parameter den Typ Object
, aber das fühlt sich schmutzig zu mir.
@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);
}
Gibt es eine richtige Weg, um pass ein String
Typ wie das erste argument, während nicht schwer Codierung mein name der Methode in der invokeMethod()
nennen? Ich habe nichts gefunden in der Powermock-Dokumentation oder in Foren, die Auseinandersetzung mit diesem, aber es ist sicherlich nicht alles, was ungewöhnlich ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie wirklich tun müssen, ist, sich TheClassBeingTested.java. Die Fehlermeldung sagt Ihnen, dass das problem ist, dass die Whitebox.invoke-Methode nicht finden können, eine Methode mit dem Namen "123A48" in TheClassBeingTested es schafft durch Reflexion. In diesem Fall, die invokeMethod ich denke, dass Sie gewählt haben, ist auf der Suche nach Parametern (Objekt classUnderTest, String methodName, Object...parameters).
Probieren Sie etwas wie dieses:
Dann können Sie auch den test Whitebox-so:
Hoffe, das hilft.
... bearbeitet Reaktion unter
Als ich Lesen konnte Ihre Frage sorgfältig, während arbeitet auch an der weiteren Entwicklung habe ich den Punkt verpasst.
In diesem Fall würde ich die folgenden änderungen an Ihrem test, um zu vermeiden, die invoke-Methode Mehrdeutigkeit Problem:
}
Diese Weise, die Zweideutigkeit ist so entfernt, dass die invokeMethod(Object Instanz, Object... arguments) wird nur angezeigt, das array von Objekten, die ist, was die Signatur der Methode sagt dem compiler zu erwarten. Obwohl String ist ein Objekt, in der Signatur der Methode Reflexion, java.lang.reflektieren verschiebt, um die zweite Signatur, die er fühlt, die Sie versuchen zu sagen, über die, die Sie wollen, es zu benutzen.
Hoffe, diese Antwort auf Ihre Anfrage besser.