PowerMock:: [java.lang.IllegalStateException: no last call auf ein mock verfügbar]
Zu verspotten, eine statische Methode powermock geben eine Ausnahme aus, während erwartet().
@Test
public void testRegistrarService()
{
mockStatic(IdGenerator.class);
expect(IdGenerator.generateNewId()).andReturn(42L);
long actualId=serTestObj.registerService();
replay(IdGenerator.class);
verify(IdGenerator.class);
assertEquals(42L,actualId);
}
public class ServiceRegistrator
{
public long registerService()
{
long id = IdGenerator.generateNewId();
return id;
}
}
public class IdGenerator
{
public static long generateNewId()
{
return System.currentTimeMillis();
}
}
Ausnahme:
java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:521)
at org.easymock.EasyMock.expect(EasyMock.java:499)
at home.powermock.testServiceRegistrator.testRegistrarService(testServiceRegistrator.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:31)
wie mock staic-Methode,während m mit powerMock
ich verwende intelliJ idea,wie zu beheben Ausnahme.
Ist
ich rufe replay-Methode hier wie replay(IdGenerator.class); aber es wurde versäumt hier..
IdGenerator.generateNewId() nicht um eine endgültige Methode.seine einzige statische Methode.
IdGenerator.generateNewId()
eine final
Methode? Wenn ja, stackoverflow.com/questions/3494969/... ist eine doppelte. Alternativ haben Sie vielleicht verpasst Aufruf EasyMock.replay
.ich rufe replay-Methode hier wie replay(IdGenerator.class); aber es wurde versäumt hier..
IdGenerator.generateNewId() nicht um eine endgültige Methode.seine einzige statische Methode.
InformationsquelleAutor SachG | 2013-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deinem code fehlt die Anmerkung
entfernen Sie die testServiceRegistrator.class aus der Liste
entfernt...immer noch die gleiche Ausnahme.. 🙁 jetzt habe ich wie @PrepareForTest(IdGenerator.class).. ich denke, dass die Ursache in "rechnen ()" - Methode.Bcz Ausnahme ist, kommt an diesem Punkt an.kann einige Sache ist Kochen hier. aber nicht in der Lage, es zu beheben?
facing gleiche Problem auch nach putting @PrepareForTest
InformationsquelleAutor JoseK
In meinem Fall fehlte mir die folgende Methode in meiner test-Klasse
Einmal ich habe es, ich entledigte sich die "no last call auf ein mock verfügbar" - Fehler.
Ich bin mit testng, junit nicht und fügte hinzu, die RunWith. Ich nahm diesen heraus und fügen Sie den ObjectFactory zu haben scheint, die mich auf meinem Weg. Ich bekam einen Einblick hier: github.com/jayway/powermock/wiki/TestNG_usage
InformationsquelleAutor gybrush
Müssen Sie legen Sie die Wiedergabe vor dem eigentlichen Aufruf der Methode.
EDIT: ich denke ein Teil des Problems verursacht werden kann, weil Ihre Importe. Versuchen Sie, nicht zu importieren statische powermock und statische easymock (ich habe festgestellt, dass ich oft sehr verwirrend und vergessen, zu was für einem muss ich anrufen replay).
Versuchen Sie mit dem folgenden code. Wenn es nicht richtig läuft, dann kann es auch sein, weil es ein problem mit der speziellen version von PowerMock/EasyMock/Junit, die Sie haben.
TestClass:
IdGenerator:
ServiceRegistrator:
Finden Sie den überarbeiteten Beitrag. Ich fügte hinzu, source-code. Ich glaube, dein problem kann mit der Art, wie Sie importiert werden, Ihren code... Versuchen Sie, Ihre Importe entsprechen den obigen code, und lassen Sie mich wissen, wie es geht
noch nicht arbeitet dieselbe Ausnahme wird kommen....ist dieser code arbeitet an Ihrer Umgebung????? Wenn ja, scheint es sich um ein jar-problem...dann lass es mich wissen, sobald die jar-verwenden Sie für EasyMock/PowerMock/JUnit....
Der code funktioniert in meiner Umgebung. Ich werde, Liste ich alles, was ich importiert habe, aber es könnte etwas sein, das ich verwende, ist nicht absolut notwendig: powermock-api-easymock-1.4.10.jar hamcrest-core-1.3.jar junit--4.11.jar platform.jar powermock-module-junit4-1.4.10.jar powermock-module-junit4-common-1.4.10.jar powermock-core-1.4.10.jar powermock-api-support-1.4.10.jar easymock-3.0.jar javassist-3.15.0-GA.jar powermock.reflect-1.4.10.jar objenesis-1.2.jar cglib-nodep-2.2.jar
HardCoreBro..ich bin mit fast gleichen Glas.aber weiß nicht, warum noch immer mit derselben Ausnahme....Sehr geehrte Können Sie mir bitte eine mail, das Sie alle jar zu meinem Google Mail-id.... "[email protected]" ...bitte E-mail alle impoted Gläser..danke
InformationsquelleAutor HardcoreBro
Diese Frage wurde hier für eine lange Zeit, aber ich werde versuchen, geben einen aswer, um zu erklären, was ich getan habe um dieses problem zu beheben.
Zuerst müssen Sie die Verwendung dieser beiden Anmerkungen:
@RunWith(PowerMockRunner.class)
Diese Anmerkung lassen Sie die aktuelle test-Klasse wissen, was zu verwenden, um seine tests, das ist praktisch, denn wir können PowerMockRunner statt JUnitRunner
@PrepareForTest(IdGenerator.class)
Diese annotation verwendet wird, bereiten Sie die Klasse "IdGenerator" der in die Prüfung vorbereiten bedeutet, dass wir in der Lage sein, zu verhöhnen, die statische Methoden, wie wir tun, um die öffentlichen Methoden
Nachdem diese zwei Anmerkungen müssen wir sicher sein, dass wir mit den richtigen Pakete von PowerMock:
1) PowerMock:
Verwenden: Wir verwenden PowerMock zu verspotten (und nicht nur) unsere statische Methode mit der folgenden code-Zeile
PowerMock.mockStatic(IdGenerator.class);
2) EasyMock:
Verwenden: Wir verwenden EasyMock, um gefälschte unser Objekt zurückgegeben werden, die von unserer statischen Methode:
EasyMock.erwarten(IdGenerator.generateNewId()).andReturn(42L);
Diese zwei Beispiele auf, welche verwendet werden, PowerMock und EasyMock, und hier werde ich versuchen, den code zu erklären und was es tut:
Achten, denn replay muss verwendet werden, bevor Sie das neue Objekt (actualId in diesem Beispiel), wird der Aufruf der statischen gefälscht Methoden.
Auch eine Menge Aufmerksamkeit auf das, was Sie importieren, für eine Ablenkung war ich mit
Statt
Ich hoffe, diese Antwort ist klar und vollständig
Übrigens, hier werde ich finden Sie einige nützliche links:
PowerMock Statische Dokumentation auf GitHub
Mvn-Repository PowerMock Bibliotheken
Sehen 😀
InformationsquelleAutor