ProcessBuilder를 사용하여 Process를 시작하고 출력을 바이트 배열로 파이프 한 다음 프로세스가 완료되면 바이트 배열을 반환하는 Java 메서드가 있습니다.ProcessBuilder 및 프로세스를 사용하는 Java 메소드를 어떻게 테스트합니까?
의사 코드 :
ProcessBuilder b = new ProcessBuilder("my.exe")
Process p = b.start();
... // get output from process, close process
은 무엇이 방법을 테스트 장치에 대해 이동하는 가장 좋은 방법이 있을까요?
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)
어떤 생각 : 나는 그것이 나에게 NoClassDefFoundError를 제공, 심지어는 믿을 수 없을만큼 멋진 JMockit으로, (그것의 최종) ProcessBuilder를 조롱하는 방법을 발견하지?
대답은 - 올라프가 권장하는대로, 나는 그것의 생성자에서 (나는 지금 테스트하고 싶은 클래스로이 인터페이스의 인스턴스를 전달하는 인터페이스
Process start(String param) throws IOException;
에 그 라인을 리팩토링 결국), 일반적으로 원래의 행을 사용하여 기본 구현을 사용합니다. 테스트하고 싶을 때 인터페이스의 모의 구현을 사용하기 만하면됩니다. 매력처럼 작동합니다. 비록 제가 여기에 넘치는 인터페이스가 있는지 궁금합니다.
당신이 전혀있는 My.exe을 실행하지 않은 경우? –
@DavidI. 위에 표시된 테스트는 즉, "my.exe"를 실행하지 않습니다. –
고마워, 나는 JMockit 초보자이다. 그래서 나는 처음에 이해하지 못했다. (하지만 난 큰 팬이야!) –