IllegalStateException - keine last call auf ein mock verfügbar
Ich versuche, EasyMock, um zu testen, dass eine Methode führt eine bestimmte Anzahl von Zeiten, aber ich bekomme immer eine IllegalStateException Fehler und ich verstehe nicht, warum. Ich bin neu mit EasyMock und JUnit und nicht sehr vertraut mit, wie Sie zu benutzen, also bin ich nicht sicher, was ich falsch mache.
Mein code ist:
FileOutputStream mockWriter;
Numbers mockByte;
@Test
public void testNumbers() throws IOException{
mockWriter = createMock(FileOutputStream.class);
mockByte = new Numbers(mockWriter);
mockByte.initByte();
expect(mockByte.generate()).times(10000);
replay(mockWriter);
}
Und dies sind die Methoden, initByte und generieren von meinen Zahlen Klasse:
public void initByte() throws IOException{
File outFile = new File("NumbersOutput.txt");
FileOutputStream f = new FileOutputStream(outFile);
for(int i = 0; i < 10000; i++){
int b = generate();
f.write(b);
}
f.flush();
f.close();
}
public int generate(){
return rand.nextInt(100001);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fehler, die Sie bekommen, ist da nichts aufrufen, alles auf Ihrem Schein.
Entgegen Ihrer Namensgebung
mockByte
bezieht sich nicht auf ein Modell ein, also in einemexpect
Anruf wie diesem ist nicht zu helfen. Sie sollten damit rechnen, dass Anrufe aufmockWriter
wenn überhaupt.Aber es ist nicht klar, warum man einen mock für einen stream überhaupt noch was in den Ausgabestrom in den Zahlen der Konstruktor verwendet wird. Ihre initByte () - Methode nicht verwenden, jedem Staat innerhalb des Objekts andere als rand. Selbst wenn dieser behoben ist, wäre es wohl am einfachsten sein einfach mit einem ByteArrayOutputStream... deine API-sprechen im Hinblick auf den Ausgabestrom statt FileOutputStream, und es werden viel einfacher zu testen.
Ich vermute, man soll:
FileOutputStream
von derinitByte
Methode, anstatt das schreiben auf den stream, akzeptieren Sie in derNumbers
KonstruktorFileOutputStream
ändern Sie es zuOutputStream
zu machen, sauberer und einfacher zu testenByteArrayOutputStream
im test - brauchen Sie nicht verspotten, überhaupt. Sie können dann alle bytes, die geschrieben wurden, und überprüfen Sie, was Sie wollen.f.write(b)
zu tun. Es kann nur noch schreiben ein einziges byte, so dass die oberen 24 bits von Ihrem Zufallszahlen werden ignoriert. An diesem Punkt, warum Sie die Wahl, eine Zahl im Bereich [0, 10000] eh?