Tengo un método de Java que inicia un proceso con ProcessBuilder, y canaliza su salida en una matriz de bytes, y luego devuelve su matriz de bytes cuando el proceso finaliza.¿Cómo pruebo la unidad de un método Java que usa ProcessBuilder y Process?
Pseudo-código:
ProcessBuilder b = new ProcessBuilder("my.exe")
Process p = b.start();
... // get output from process, close process
¿Cuál sería la mejor manera de ir sobre la unidad de pruebas de este método? No he encontrado una manera de burlarse ProcessBuilder (que es la última), incluso con el increíblemente impresionante JMockit, me da una NoClassDefFoundError:
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)
¿Alguna idea?
respuesta - Como recomienda Olaf, que terminó refactorización esas líneas a una interfaz
Process start(String param) throws IOException;
Paso ahora una instancia de esta interfaz en la clase que quería probar (en su constructor), normalmente utilizando una implementación predeterminada con las líneas originales. Cuando quiero probar simplemente utilizo una implementación simulada de la interfaz. Funciona como un amuleto, aunque me pregunto si me estoy sobre-interconectando aquí ...
¿Qué pasa si usted no desea ejecutar my.exe en absoluto? –
@DavidI. La prueba que se muestra arriba hace eso, es decir, no ejecuta "my.exe". –
Gracias, soy un novato JMockit, así que no entendí al principio. (¡Pero soy un gran fan!) –