У меня есть метод Java, который запускает процесс с помощью ProcessBuilder и направляет его вывод в байтовый массив, а затем возвращает свой байтовый массив после завершения процесса.
Псевдо-код:
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)
Есть мысли?
Ответ - В соответствии с рекомендациями Олафа, я закончил рефакторинг этих строк в интерфейс
Process start(String param) throws IOException;
Теперь я передаю экземпляр этого интерфейса в класс, который я хотел протестировать (в его конструкторе), обычно используя реализацию по умолчанию с исходными строками. Когда я хочу протестировать, я просто использую фиктивную реализацию интерфейса. Работает как очарование, хотя мне интересно, не слишком ли я здесь взаимодействую ...