Tôi có một phương thức Java khởi động một Process với ProcessBuilder, và đưa đầu ra của nó vào một mảng byte, và sau đó trả về mảng byte của nó khi quá trình kết thúc.Làm cách nào để đơn vị thử nghiệm một phương thức Java sử dụng ProcessBuilder và Process?
Pseudo-code:
ProcessBuilder b = new ProcessBuilder("my.exe")
Process p = b.start();
... // get output from process, close process
Điều gì sẽ là cách tốt nhất để đi về đơn vị thử nghiệm phương pháp này? Tôi đã không tìm thấy một cách để thử ProcessBuilder (nó chính thức), ngay cả với những vô cùng tuyệt vời JMockit, nó mang lại cho tôi một 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)
Bất kỳ suy nghĩ?
trả lời - Như Olaf đề nghị, tôi đã kết thúc refactoring những dòng để một giao diện
Process start(String param) throws IOException;
bây giờ tôi vượt qua một thể hiện của giao diện này vào lớp tôi muốn thử nghiệm (trong constructor của nó), thường sử dụng triển khai mặc định với các dòng gốc. Khi tôi muốn thử nghiệm, tôi chỉ đơn giản là sử dụng thực hiện mô hình của giao diện. Hoạt động như một sự quyến rũ, mặc dù tôi tự hỏi liệu tôi có đang giao tiếp quá mức ở đây không ...
gì nếu bạn không muốn thực hiện my.exe ở tất cả? –
@DavidI. Các thử nghiệm được hiển thị ở trên không có nghĩa là, nó không thực hiện "my.exe". –
Cảm ơn, tôi là một người mới chơi JMockit, vì vậy lúc đầu tôi không hiểu. (nhưng tôi là một fan hâm mộ lớn!) –