2017-02-22 2 views
1
PowerMockito.spy(SomeClass.class); 
PowerMockito.doNothing().when(SomeClass.class); 
SomeClass.StaticVoidMethod(); 

Dies scheint nicht zu funktionieren. Ich bekomme UnfinishedStubbingException.Wie static static void Methoden, die keine Argumente hat?

+0

Die Notwendigkeit, statische Methoden zu verspotten, ist ein üblicher Code-Geruch, der darauf hinweist, dass Sie diese Methode in eine Schnittstelle oder Klasse verschieben sollten, damit Sie eine gefälschte oder gefälschte Instanz einführen und * den * in den Code, den Sie testen, übergeben Spotte die statische Methode global. – dimo414

+0

Kann den Code nicht ändern, da er nicht von mir geschrieben wurde. Irgendwelche Vorschläge, wie man das testet? – mhsree

+1

"Es ist nicht von mir geschrieben." Es kommt von einer Drittanbieter-Lib? Bitte geben Sie weitere Einzelheiten an. – davidxxx

Antwort

1

Wenn Sie den "Code im Test" wirklich nicht ändern können; und dieser statische Aufruf gibt Ihnen Probleme, dann ist Ihre einzige Option, PowerMock zu verwenden; und wie die anderen Antwort Umrisse, ihre documentation gibt eine genaue Beschreibung, wie man das macht (und für die Aufzeichnung: Lesen und befolgen Sie diese Anweisungen sorgfältig).

Aber Sie müssen verstehen, dass PowerMock im Vergleich zu anderen mocking Frameworks "teurer" ist; Zum Beispiel: Sie können PowerMock nicht gut mit Mockito kombinieren. Natürlich gibt es PowerMockito; aber dieses Tool funktioniert nur mit ziemlich veralteten Versionen von Mockito.

Lange Rede, kurzer Sinn: PowerMock kann dieses Problem lösen; aber seien Sie nicht überrascht, wenn es andere Probleme für Sie auf lange Sicht schafft.

+0

Danke! Sie haben Recht! – mhsree

0

Sie haben Ihren Mockito-Satz nicht ganz beendet. Sie haben vergessen, dem Stub zu sagen, welche Methode er aufrufen wird.

Um den Satz zu vervollständigen ... den Methodenaufruf am Ende nicht vergessen.

PowerMockito.doNothing().when(SomeClass.class).StaticVoidMethod(); 
+0

Wie sonst kann ich das tun? – mhsree

+0

Warum eine Antwort? :) – davidxxx

+0

@mhsree: Ich habe die Antwort überarbeitet; Ich hatte das Gefühl, dass es offensichtlich war, worauf ich mich bezog, aber mir ist klar, dass das nicht der Fall war. – Makoto

1

können Sie

PowerMockito.mockStatic(SomeClass.class) 

verwenden diese alle Methoden dieser Klasse verspotten.

Weitere Informationen erhalten Sie über diesen Link https://github.com/powermock/powermock/wiki/MockStatic

Prost !!!

+0

Ich hatte dies versucht, die Methode wird noch ausgeführt. – mhsree

+0

@mhsree Dann vermissen Sie einen der dort aufgeführten Schritte. Seien Sie versichert: PowerMock ist ein schreckliches Werkzeug, aber wenn Sie es richtig verwenden, wird es erledigt. – GhostCat