0

で単体テスト用のパッケージを書いていますNetbeans IDE。ここで、実行ステートメントのフローをSystem.outwhile エラー ステートメントから に出力していSystem.errorます。現在、これらは 2 つの異なるストリームであるため、順不同で印刷されています。つまり、それらは同期して印刷されていません。flushメソッドがステートメントを即座に出力することは知っていますが、そのようなステートメントごとにこれを書くのは面倒です。ストリームをすぐにフラッシュするように事前に構成する方法。ユニットテストの開始時でしょうか?

Netbeans2 つのストリームの出力を示す2 つの異なる色を利用したいので、これが必要です。

また、私のアプローチの間違った点と改善のための提案は大歓迎です。

4

3 に答える 3

2

実行の流れを自分で出力しないでください。それをしない多くの理由はどこにありますか:

  • 成功したテストの状態を出力しないでください。そうする理由は非常に限られています。テストで実際に求めているのは、よくできたケースではなく、バグを見つけることです。あなたの問題に集中してください。
  • jUnitTestNGなどの単体テスト用の最新のフレームワークはすべて、テスト結果を出力するための組み込みメカニズムを提供します。それらを学ぶために少し時間を費やすだけで、テストはより有益になります。
  • 冗長なログはテストの速度を低下させます。テストは頻繁に起動する必要があるため、これは重要です。
  • Fail fast practice を使用すると、一度に 1 つの失敗したメッセージだけに関心を持つことになります。これは、より効果的に集中できる良いアプローチです。

つまり、成功ログは役に立たないため、読み取ることはありません。失敗したテストについては、メッセージングを備えた標準アサーションがあります。

于 2013-05-31T13:50:34.620 に答える
2

別の可能性もありますので、試してみてください。

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;

public class SystemOut {
    public static void main(String[] args) {
        System.out.println("Hi");

        final OutputStream newOs = new OutputStream() {
            FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

            @Override
            public void write(int b) throws IOException {
                this.fdOut.write(b);
            }
        };

        System.setOut(new PrintStream(newOs));
        System.out.println("Hi, again");
    }
}

アイデアは、既存のバッファリングされた出力ストリームをバッファリングされていないものに置き換えることです。

于 2013-05-31T13:20:43.953 に答える
1

別の方法でprintln()ラップするだけです:flush()

void out(String s) {
  System.out.println(s);
  System.out.flush();
}

とにかく、テストの書き方を見ると、情報メッセージしかありません。エラーメッセージは、失敗したアサーションによって暗黙的に書き込まれます。

于 2013-05-31T10:43:48.340 に答える