2016-03-17 22 views
7

JUnitとSelenium Webdriverを使用しています。私は私のコードでそれらを書く方法として以下のように、順番に私のテストメソッドを実行したい:Junitで順番にテストメソッドを実行する方法

@Test 
public void registerUserTest(){ 
    // code 
} 

@Test 
public void welcomeNewUserTest(){ 
    // code 
} 

@Test 
public void questionaireNewUserTest(){ 
    // code 
} 

しかし、それは動作しません、それは常にこの順序で私のテストメソッドを実行します。

welcomeNewUserTest() 
registerUserTest() 
questionaireNewUserTest() 

私はメソッドに接尾辞Testを付けて答えを読んだところ、JUnitはそれらをコードでどのように並べるのか順番に実行します。明らかに、これは動作しません。

助けが必要ですか?ありがとう

+3

私があなたのシナリオを正しく理解していれば、それはテストへの悪いアプローチです。テストはお互いに独立しているべきです。 –

+0

@DmitryZaitsev:ええ、私は知っています。私は受け入れテストを書くので、それは本当に大きいです、私はちょうど小さなテストメソッドに分解しようとします。 Junitが順番に実行できるかどうか確認してください – Ragnarsson

+1

[JUnit4で特定の順序でテストメソッドを実行するにはどうすればいいですか?](http://stackoverflow.com/questions/3693626/how-to-run-test-methods- in-specific-in-junit4) –

答えて

6

このようなテスト - ステップがお互いに依存している場所 - 実際には1つのユニットとして実行する必要があります。 @Jeremiahは以下のとおり述べて、独立したテストは予測不可能に実行することができますユニークな方法のほんの一握りがある

@Test 
public void registerWelcomeAndQuestionnaireUserTest(){ 
    // code 
    // Register 
    // Welcome 
    // Questionnaire 
} 

:あなたは本当にのようなものをやるべき。

私はこれを言っています。あなたの解決策はここにあります。

別々のテストが必要な場合は、@FixMethodOrderを使用してからNAME_ASCENDINGで行うことができます。これが私が知る唯一の方法です。

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class TestMethodOrder { 

    @Test 
    public void testA() { 
     System.out.println("first"); 
    } 
    @Test 
    public void testC() { 
     System.out.println("third"); 
    } 
    @Test 
    public void testB() { 
     System.out.println("second"); 
    } 
} 

が実行されます:

testA(), testB(), testC()

をお使いの場合:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class ThisTestsEverything{ 

    @Test 
    public void T1_registerUser(){ 
     // code 
    } 

    @Test 
    public void T2_welcomeNewUser(){ 
     // code 
    } 

    @Test 
    public void T3_questionaireNewUser(){ 
     // code 
    } 

} 
+1

ありがとうございました。私は実際にあなたが言ったように、それらを1つの単位として実行しました。私はちょうどこれを行う機会があるかどうかを知りたがっていました。そして、@FixMethodOrderは動作します。それは私が探していたもののようなものです。ありがとう。私はそれについて知らなかった – Ragnarsson

+0

@LouisTまあそれはあなたのアプローチを変えて、あなたは今あなたがそれを必要とする場合は今あなたのソリューションを持っていることは素晴らしいです。 –

+1

注文注釈を使用する際に覚えておかなければならないことは、テストの実行方法によっては依然として不具合が発生する可能性があることです。たとえば、SureFireを使用する場合は、その構成でRunOrderを定義する必要があります。http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#runOrder また、あなたのテスト(Mavenなど)にマルチスレッドを導入することができる実行ツールを使用して、テストが再び正常に実行されない可能性があります。私はこの点については分かりませんが、予期しない結果が出始めたら覚えておく価値があります。 – Jeremiah

3

あなたは彼らが書かれている方法として、順番に、あなたのテストメソッドを実行することはできません。 テストは互いに独立している必要があります。 JUnitは依存テストを推奨していません。あなたは非常に希望している場合は

は、しかし...

@FixMethodOrder注釈があります。以下をお読みくださいAnnotation Type FixMethodOrder

関連する問題