Ich habe eine Java-Methode, die einen Prozess mit ProcessBuilder startet und seine Ausgabe in ein Byte-Array pipettiert und dann das Byte-Array zurückgibt, wenn der Prozess beendet ist.Wie teste ich Unit-Test eine Java-Methode, die ProcessBuilder und Process verwendet?
Pseudo-Code:
ProcessBuilder b = new ProcessBuilder("my.exe")
Process p = b.start();
... // get output from process, close process
Was wäre der beste Weg, Einheit zu gehen über diese Methode zu testen?
java.lang.NoClassDefFoundError: test/MockProcessBuilder
at java.lang.ProcessBuilder.<init>(ProcessBuilder.java)
at mypackage.MyProcess.start(ReportReaderWrapperImpl.java:97)
at test.MyProcessTest.testStart(ReportReaderWrapperImplTest.java:28)
Irgendwelche Gedanken: Ich habe nicht einen Weg zu verspotten Process (es ist endgültig), auch mit dem unglaublich genial JMockit, es gibt mir ein NoClassDefFoundError gefunden?
Antwort - Als Olaf empfohlen, landete ich
Process start(String param) throws IOException;
ich jetzt eine Instanz dieser Schnittstelle in die Klasse übergeben I (in seinem Konstruktor testen wollte diese Zeilen an eine Schnittstelle Refactoring up), wobei normalerweise eine Standardimplementierung mit den ursprünglichen Zeilen verwendet wird. Wenn ich testen will, verwende ich einfach eine Pseudo-Implementierung der Schnittstelle. Funktioniert wie ein Zauber, obwohl ich mich wundere, wenn ich hier über die Schnittstelle bin ...
Was passiert, wenn Sie nicht my.exe überhaupt ausführen wollten? –
@DavidI. Der oben gezeigte Test macht das, dh es führt "my.exe" nicht aus. –
Danke, ich bin ein JMockit-Neuling, also habe ich das zunächst nicht verstanden. (Aber ich bin ein großer Fan!) –