0

我正在编写一个 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()调用native可能是 C 代码的代码,如下所示:

...
printf("fail\n");

或 C++ 代码,如:

...
std::cout << "fail" << std::endl;

为清楚起见,我不想将调用重定向到System.out.X自定义PrintStreamvia System.setOut。我想获取stdout在执行native我无法控制的调用期间写入标准流的字节的副本(如果有)。

想法?

4

1 回答 1

0

如果您想从本机代码中捕获输出,您无法单独在 JVM 中执行此操作,而是需要操作系统来帮助您。

您必须在单独的 JVM 中调用您的测试,并且您必须要求操作系统为您捕获输出。在 shell 中运行进程的常用方法可能是您所需要的。

于 2013-08-26T20:42:57.147 回答