web-dev-qa-db-ja.com

JUnitテストケースを順番に実行する方法

私はJUnit4を使用しています。

テストケースに一連のテストメソッドがあります。

各テストメソッドはいくつかのレコードを挿入し、テスト結果を検証して、最後に挿入されたレコードを削除します。

JUnitは並行して実行されるため、前のテストメソッドの実行中にいくつかのレコードが存在するため、テストメソッドは失敗します。これは私の同僚のマシン(Windows 7)でのみ発生し、私のマシン(Cent OS 6)では発生しません。

私たちが必要としているのは、テストメソッドがすべてのマシンに合格する必要があるということです。

Setup()メソッドでレコードをクリアしようとしましたが、これも私のマシンでのみ機能します。 JUnitでテストメソッドを一定の順序で実行するためのオプションはありますか?

おかげで、

22
Athiruban

MethodSortersは、Junit 4.6リリース後に導入された新しいクラスです。このクラスは、3つのタイプの実行順序を宣言しました。これは、実行中にテストケースで使用できます。

  1. NAME_ASCENDING(MethodSorters.NAME_ASCENDING)-テストメソッドをメソッド名で辞書順にソートします。

  2. JVM(null)-テストメソッドを、JVMから返された順序のままにします。 JVMからの順序は実行ごとに異なることに注意してください。

  3. DEFAULT(MethodSorter.DEFAULT)-テストメソッドを確定的な順序で並べ替えますが、予測可能な順序ではありません。

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

//Running test cases in order of method names in ascending order

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTestCasesExecution {

    @Test
    public void secondTest() {
        System.out.println("Executing second test");
    }

    @Test
    public void firstTest() {
        System.out.println("Executing first test");
    }

    @Test
    public void thirdTest() {
        System.out.println("Executing third test");
    }
}

出力:

Executing first test
Executing second test
Executing third test

リファレンス: http://howtodoinjava.com/2012/11/24/ordered-testcases-execution-in-junit-4/

27
Ranga Reddy

JUnit 4.11は @FixMethodOrder アノテーション。

26

JUnitでは、テストの順序は保証されていません。

これは、ユニットテストがアトミックであることを目的としているためです。すべてのセットアップは、セットアップ/ティアダウンメソッドで行われる必要がありますが、他のテストでは行われません。

データを挿入するコードを、挿入するテストと検証が必要なクラスの両方から呼び出すことができる別のヘルパークラスに移動し、@ Beforeメソッドでそのクラスを呼び出すことを検討してください。

可能であれば、データベースを直接ヒットするのではなく、モッキングソリューション(例:Mockito)も検討する必要があります。モッキングは、テストが適切に分離されていることを確認するのに大いに役立ちます。いくつかのリファクタリングを使用できる場所。

8
Roy Truelove

テストを並行して実行していて、データベースにアクセスしているため、データベースが必ずしも各テストで一貫した状態になるとは限らないため、問題が発生する可能性が高くなります。

解決策:テストを並行して実行しないでください。 JUnitはデフォルトでは並行してテストを実行しないので、Mavenでオプションを設定するか、JUnitのいずれかの並列ランナーを使用します。

Windowsでテストが失敗し、Cent OSでテストの失敗がない場合は、実行順序の問題である可能性があり、修正する必要があります。私の回答を参照してください JUnit4はテストの順序付けをサポートし始めましたか?それは意図的ですか?

これを回避するには(少なくともJUnitの用語では)、テスト間の依存関係を削除します。基本的に、JUnitは順序付けをサポートしておらず、テストは任意の順序で実行できるはずです。

テスト間に依存関係が本当に必要な場合は、依存関係を持つことができるTestNGを使用します。

2
Matthew Farwell