考虑以下方法:
Process execProcess(String... command) throws IOException {
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
return pb.start();
}
我想为execProcess()
编写测试,以便测试该方法是否确实输出了继承当前进程的stdout / stderr的进程。这样的事情就是我想要的:
@Test
public void testProcessFDInheritance() {
Process p = execProcess("echo", "test thing");
/*
Check current process' stdout to see if p outputted "test thing"
*/
}
答案 0 :(得分:1)
原始程序的stdout由启动它的任何进程拥有 - 可能是终端,或某些文件重定向,或管道到另一个进程。
由于您无法控制自己的标准输出,因此解决此问题的唯一方法是在包装过程中启动原始可执行文件。然后,包装器进程可以执行检查以确定它是否看到了特定的输出。
Wrapper
启动original
,original
启动echo
。 echo
打印到与original
共享的标准输出,wrapper
从original's
标准输出读取"test thing"
。