0

native最終的に関数呼び出しが呼び出されるコードを呼び出す JUnit テスト ケースを作成しています。私が書きたいテストの疑似コードは次のとおりです。

@Test
public void testNoWritesToStdOut() {
    x = new StdOutTrap();
    x.startTrappingStdOut();
    try {
        callTheFunctionUnderTest(); // Nothing should be written to stdout
        assertEquals("", x.capturedOutput());
    } finally {
        x.stopTrappingStdOut();
    }
}

次のように、C コードである可能性があるコードをcallTheFuntionUnderTest()呼び出すことに注意してください。native

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

または、次のような C++ コード:

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

System.out.Xわかりやすくするために、呼び出しをカスタムPrintStream経由にリダイレクトしたくありませんSystem.setOut。制御できない呼び出しstdoutの実行中に標準ストリームに書き込まれたバイトがある場合は、そのコピーを取得したいと考えています。native

アイデア?

4

1 に答える 1

0

ネイティブ コードから出力をキャプチャする場合は、JVM だけでこれを行うことはできず、オペレーティング システムの支援が必要です。

別の JVM でテストを呼び出す必要があり、オペレーティング システムに出力をキャプチャするように依頼する必要があります。シェルでプロセスを実行する通常の方法が必要な場合があります。

于 2013-08-26T20:42:57.147 に答える