2012-03-12 13 views
13

私はJUnit4を使用しています。JUnitテストケースを順番に実行するにはどうすればいいですか?

私はテストケースに一連のテストメソッドを用意しています。

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

は、並列にJUnitを実行するので、試験方法は、以前の試験方法の実行中に存在理由の一部 記録を失敗します。この は私の同僚のマシン(Windows 7)でのみ起こり、私のマシンでは起こりません(Cent OS 6)。

私たちが必要とするのは、テストメソッドがすべてのマシンに渡されなければならないということです。

私はSetup()メソッドでレコードを消去しようとしましたが、もう一度自分のマシンでのみ動作します。テストメソッドを一貫した順番で実行するために、JUnitで使用できるオプションはありますか?

おかげで、テストの

答えて

5

注文はJUnitのでは保証されません。

これはユニットテストがアトミックであることを意味しています。セットアップはセットアップ/ティアダウンの方法ですべて行われますが、他のテストでは行われません。

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

もしあなたができれば、模擬テストが素敵で孤立していることを確認するためには、通常、リファクタリングを使用できる場所を指摘するのに役立ちます。

+0

あなたの答えをありがとう、私はそれをチェックアウトします。 – Athiruban

+1

DBUnitのようなものを使用してデータベースのセットアップと分解を制御することもできますが、純粋な単体テストでは、テストが完全に独立しているため、Mockitoが理にかなっています。 – TrueDub

2

あなたはテストを並行して実行しているため、データベースにヒットしているので、データベースが必ずしも各テストの一貫性のある状態にあるとは限りません。

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

Windowsでテストが失敗してもCent OSでテストに失敗しても問題が解決しない場合は、実行順序に問題があり修正する必要があります。私の答えはHas JUnit4 begun supporting ordering of test? Is it intentional?です。

これは(少なくともJUnitでは)テスト間の依存関係を取り除く方法です。基本的に、JUnitは注文をサポートしておらず、テストは任意の順序で実行できる必要があります。

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

23

JUnit 4.11では、@FixMethodOrderアノテーションを使用して実行順序を指定できるようになりました。

21

MethodSorterは、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/

-1

あなたはそれで自分のデータ層を有していても、並行してテストを実行している問題ありません。しかし、データにMOCK UPを作成するための追加作業が必要で、データベースにヒットしないようにする必要があります。あなたはMockito、EasyMock、Arquillianのような異なるモックアップフレームワークを使うことができます。

+0

Arquillianはモックフレームワークではありません。 http://arquillian.org/を参照してください。 –

関連する問題