我正在编写一个JUnit测试用例,该测试用例调用最终导致调用native
函数调用的代码。这是我想写的测试的伪代码:
@Test
public void testNoWritesToStdOut() {
x = new StdOutTrap();
x.startTrappingStdOut();
try {
callTheFunctionUnderTest(); // Nothing should be written to stdout
assertEquals("", x.capturedOutput());
} finally {
x.stopTrappingStdOut();
}
}
注意callTheFuntionUnderTest()
调用可能是C代码的native
代码,如:
...
printf("fail\n");
或C ++代码,如:
...
std::cout << "fail" << std::endl;
为清楚起见,我不想通过System.out.X
将来自PrintStream
的来电重定向到自定义System.setOut
。我想得到一个字节的副本,如果有的话,在stdout
调用执行期间写入native
标准流,我无法控制。
想法?
答案 0 :(得分:0)
如果要从本机代码捕获输出,则不能仅在JVM中执行此操作,而是需要操作系统来帮助您。
您必须在单独的JVM中调用测试,并且必须要求操作系统为您捕获输出。在shell中运行进程的常用方法可能就是您所需要的。