我正在运行一个简单的单元测试,以使用外部流程输出Java版本。输出出现在控制台中,并且进程成功运行,但是在调用getInputStream()时输出始终为空。我不明白为什么。
@Test
public void testProcess() throws IOException, InterruptedException, ExecutionException {
ProcessBuilder processBuilder = new ProcessBuilder("java", "-version");
processBuilder.inheritIO();
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int exitCode = process.waitFor();
assertEquals("No errors should be detected", 0, exitCode);
BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
List<String> results = output.lines()
.collect(Collectors.toList());
// This line always fails
assertThat("Result should not be empty", results, is(not(empty())));
assertThat("Result should contain java version: ", results, hasItem(containsString("java version")));
//result.forEach(LOG::info);
}
即使在eclipse中运行测试时,结果始终为空,命令会运行并且版本会显示在控制台中。
我只是在尝试使用processbuilder和process。在一些示例中,我看到了在不同线程中读取响应的情况,但这并没有任何区别。它总是失败。同样,如果我包含对heriterIO和redirectErrorStream的调用,则没有任何区别。
谢谢。