Powermock (Mit Easymock) keine last call auf ein mock verfügbar
Ich versuche zu laufen, nur ein einfacher Testfall. Ich habe die folgende Methode.
public static void run(String[] args) throws Throwable {
CommandLineArguments opts = CommandLineOptionProcessor.getOpts(args);
}
Ich werde auch weiterhin bauen diese Methode /test-Fall, wie ich gehen. Aber ich wollte nur sicherstellen, dass ein einfacher Testfall arbeitete zunächst. Also schrieb ich den folgenden test.
@Test
public void testRun() {
String[] args = {"--arg1", "value", "--arg2", "value2"};
mockStatic(CommandLineOptionProcessor.class);
expect(CommandLineOptionProcessor.getOpts(args));
EasyMock.replay(CommandLineOptionProcessor.class);
}
Danach erhalte ich die folgende Fehlermeldung:
java.lang.IllegalStateException: no last call on a mock available
Ich Lesen Sie einige der anderen Beiträge auf StackOverflow, aber Ihre Lösung scheint zu sein, dass Sie mit PowerMock mit Mockito. Ich bin mit Powermock und Easymock, so dass sollte nicht das problem sein.
Folgte ich Rene ' s Rat und fügte hinzu, die folgenden an der Spitze meiner Klasse.
@PrepareForTest(CommandLineOptionProcessor.class)
@RunWith(PowerMockRunner.class)
public class DataAssemblerTest {
Habe ich Fix die vorherigen Fehler. Aber jetzt habe ich diesen Fehler.
java.lang.IllegalArgumentException: Not a mock: java.lang.Class
at org.easymock.internal.ClassExtensionHelper.getControl(ClassExtensionHelper.java:61)
at org.easymock.EasyMock.getControl(EasyMock.java:2172)
at org.easymock.EasyMock.replay(EasyMock.java:2074)
.
.
.
Irgendwelche Ideen auf, was könnte die Ursache sein wäre toll.
- Verwenden Sie maven?
- Nein. Ich bin derzeit nicht mit Maven.
- Ich habe das Problem mit dem JavaAssist. Stellt sich heraus, ich hatte einfach nicht die Bibliothek in das Projekt. So, dass ist jetzt gut. Aber ich habe jetzt das neue Problem, der sagt, 'Nicht verspotten'.
- Ich aktualisierte die Antwort
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie kommentieren Sie die test-Klasse mit
@RunWith(PowerMockRunner.class)
und@PrepareForTest(CommandLineOptionProcessor.class)
?Müssen Sie die
@PrepareForTest(CommandLineOptionProcessor.class)
bei der test-Klasse Niveau. Finden Sie die Powermock doc:Sorgen auch dafür, dass die benötigten Bibliotheken auf den test-Klassenpfad.
In Ihrem Fall die javassist Bibliothek fehlt. Legen Sie es auf den Klassenpfad. Vielleicht einige andere libs fehlen auch noch... wir werden sehen.
Wenn Sie
dann sind Sie mit
EasyMock.replay()
, aber Sie müssenPowerMock.replay()
oder
oder
ist nicht in Ihrem code, müssen nach der Methode, die Sie testen möchten
im Falle, dass der test-Methode ist eine void-Methode.
ansonsten können Sie verwenden :
bitte fügen Sie diese, um Sie test-Klasse :