3

JUnitテストケースのセットがあり、junitタスクを使用してANTから実行します。テストの実行中、コンソールでは、現在実行されているテストケース(つまりJavaクラス)のみが表示され、テストメソッドは表示されません。現在実行中のテストメソッドを印刷する方法はありますか?または、自分のJUnitテストランナーを用意する以外に、これを行う方法はありますか?

コンソール出力のサンプル

[junit] Running examples.TestCase1
[junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 2.835 sec

代わりに、次のような出力を取得したい

[junit] Running examples.TestCase1
[junit] Running examples.TestCase1.test1
[junit] Running examples.TestCase1.test2
[junit] Running examples.TestCase1.test3
[junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 2.835 sec
4

6 に答える 6

7

残念ながら、JUnitに接続する良い方法はありません。TDDで開発されたフレームワークの場合、それは驚くほど敵対的です。

@Rule代わりに使用してください:

import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Log the currently running test.
 * 
 * <p>Typical usage:
 * 
 * <p>{@code @Rule public LogTestName logTestName = new LogTestName();}
 *
 * <p>See also:
 * <br>{@link org.junit.Rule}
 * <br>{@link org.junit.rules.TestWatcher}
 */
public class LogTestName extends TestWatcher {

    private final static Logger log = LoggerFactory.getLogger( "junit.logTestName" );

    @Override
    protected void starting( Description description ) {
        log.debug( "Test {}", description.getMethodName() );
    }

}

ノート:

静的ロガーを使用しています。これによりコードの実行が速くなりますが、私の主な理由は、テスト名のログ記録が横断的関心事であるためです。テストクラスごとに構成するのではなく、中央の場所でこのログ記録を有効/無効にしたいのです。

もう1つの理由は、ビルド出力を処理するツールがあり、それらを固定パターン用に構成する方が簡単なことです:-)

これが必要ない場合は、のロガーを入手してdescription.getTestClass()ください。

于 2013-09-26T13:06:06.030 に答える
1

formatterタイプをプレーンに設定して使用してみてください。

<formatter type="plain" usefile="false"/>

または

org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatterクラスを拡張することにより、カスタムフォーマッタの実装を使用できます。

于 2013-03-05T11:48:06.430 に答える
1

からクラスを派生させRunListener、メソッドをオーバーライドしますtestStarted()Descriptionテストクラスとテストメソッドを取得できるパラメータを受け取ります。たとえば、 description.getMethodName()

于 2017-07-01T08:21:48.460 に答える
1

TestNameルールを利用することができます。次のコードをテストクラスに追加するだけです。

@Rule
public TestName testName = new TestName();

@Before
public void printTestMethod() {
    System.out.println("Running " + testName.getMethodName());
}
于 2019-03-07T14:01:13.770 に答える
0

独自のテストランナーを作成したくない場合は、スタックトレースを使用してみてください。

次のメソッドは、それを呼び出したメソッドのクラスとメソッド名を出力します。

public static void printMethod() {
    System.out.println(Thread.currentThread().getStackTrace()[2]);
}

各テストメソッドでこのメソッドを呼び出す必要があります。

于 2013-03-05T11:35:08.677 に答える
0

追加するshowoutput="true"と、テストの実行中にjunitテストで出力がログに記録されました。

junit fork="yes" showoutput="true" printsummary="withOutAndErr"
于 2015-07-30T17:00:39.937 に答える