5

アプリケーションでいくつかのJUnitテストを実行しています。すべてのテストには、それぞれのメソッドを10000回呼び出すforループがあります。テストされたメソッドは、大量のログを生成します。これらのログは、テスト出力としてJUnitによって自動的に収集されます。JUnitが出力を保持する文字列バッファが大きくなりすぎるため、この状況はOutOfMemoryErrorになります。テスト中にこれらのログは必要ないので、JUnitに「プログラム出力を保持しない」ように指示する方法があれば十分です。何か案は?

4

6 に答える 6

3

どのタイプのロギングを使用していますか?デフォルトのログ動作をオーバーライドして、すべてのログメッセージを無視する方法はありますか?

于 2008-09-19T16:39:07.807 に答える
1

いくつかのオプション:

  1. 標準出力ではなくファイルにダンプするようにログを変更します。
  2. -Xmx <some number>Mのように、で最大ヒープサイズを増やします-Xmx 256M
于 2008-09-19T16:38:32.287 に答える
0

使用可能なメモリを増やすだけです。VMに-Xmx256m-Xmx256mを追加してみてください。

于 2008-09-19T16:39:13.033 に答える
0

回答はすでに受け入れられているようですが、入力してテストを迅速に行っていたら、次のように送信していたはずです。

「ロギング」とは System.out.println() または System.err.println() を意味し、テストにログが本当に必要ないことが確実な場合は、stdout と stderr をプログラムでリダイレクトできます。

// Save the original stdout and stderr
PrintStream psOut = System.out;
PrintStream psErr = System.err;
PrintStream psDevNull = null;
try
{
    // Send stdout and stderr to /dev/null
    psDevNull = new PrintStream(new ByteArrayOutputStream());
    System.setOut(psDevNull);
    System.setErr(psDevNull);
    // run tests in loop
    for (...)
    {
    }
}
finally
{
    // Restore stdout and stderr
    System.setOut(psOut);
    System.setErr(psErr);
    if (psDevNull != null)
    {
        psDevNull.close();
        psDevNull = null;
    }
}

この方法では、テスト出力は無効になりますが、JUnit からの他の出力は無効になりません。これは、次のようにコマンド ラインでリダイレクトを使用した場合と同様です。

ant test &> /dev/null

コマンド ライン リダイレクトにより、テストしているクラスからの出力だけでなく、Ant/JUnit のすべての出力がリダイレクトされるため、おそらくこれは望ましくありません。プログラムによるリダイレクトでは、プログラム内の System.out および System.err への出力/書き込みのみがリダイレクトされ、Ant および JUnit からの出力は引き続き得られます。

于 2008-09-19T22:52:29.827 に答える
0

解決策は、ロギング プロパティをオーバーライドすることでした。今、ログを無効にしましたが、すべてが機能しているようです (テストはまだ実行中です)。動作する場合は、ファイルにログを記録する方法を構成します。みなさん、ありがとうございます (そして、このサイトを作ってくれたジェフと友人たちにおめでとう)。

于 2008-09-19T17:20:51.747 に答える