如何对使用 ProcessBuilder 和 Process 的 Java 方法进行单元测试?
2022-09-03 14:33:01
我有一个Java方法,它使用ProcessBuilder启动一个Process,并将其输出管道化为字节数组,然后在进程完成后返回其字节数组。
伪代码:
ProcessBuilder b = new ProcessBuilder("my.exe")
Process p = b.start();
... // get output from process, close process
对这种方法进行单元测试的最佳方法是什么?我还没有找到一种方法来嘲笑ProcessBuilder(它是最终的),即使使用令人难以置信的JMockit,它也给了我一个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)
有什么想法吗?
答 - 正如Olaf所建议的那样,我最终将这些行重构到一个接口上。
Process start(String param) throws IOException;
我现在将此接口的一个实例传递到要测试的类(在其构造函数中),通常使用具有原始行的默认实现。当我想测试时,我只需使用接口的模拟实现。就像一个魅力,尽管我确实想知道我是否在这里过度连接......