2012-10-22 7 views

答えて

9

残念ながら、このロジックをコーディングする必要があります。 JUnitにはこのような機能はありません。実行中「の前に」必要とテストが含まれている1及び第二のそれはこれを必要としないテストが含まれています

  1. ただ、別のテストケース2のテストケース: は、一般的に、あなたは2つのソリューションを持っています。
  2. 独自のテストを実行し、テストに注釈を付けて使用します。独自の注釈@RequiresBeforeを作成し、このアノテーションでこれを必要とするテストをマークします。テストランナーは注釈を解析し、「前」メソッドを実行するかどうかを決定します。

第2の解決策はより明確である。最初の方が簡単です。これは、あなたが選んだものの1つです。

15

@Enclosedランナーを使用して2つの内部テストクラスを持つことを検討してください。 1つは必要な@Beforeメソッドで、もう1つはありません。

Enclosed

@RunWith(Enclosed.class) 
public class Outter{ 

    public static class Inner1{ 

    @Before public void setup(){} 

    @Test public void test1(){} 
    } 

    public static class Inner2{ 

    // include or not the setup 
    @Before public void setup2(){} 

    @Test public void test2(){} 
    } 

} 
19

あなたはTestRuleでこれを行うことができます。

public Statement apply(final Statement base, final Description description) { 
    return new Statement() { 
    @Override 
    public void evaluate() throws Throwable { 
     if (description.getAnnotation(DontRunBefore.class) == null) { 
     // run the before method here 
     } 

     base.evaluate(); 
    } 
    }; 
} 
+0

更新されたリンクは次のとおりです。https://github.com/junit-team/junit/wiki/Rules参照:http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen

+4

TestRule内から@Before文を簡単に実行する方法はありますか?私は '//ここでメソッドを実行する 'の最も単純なアプローチが何であるか疑問に思っています。 – loeschg

0
:あなたは、いくつかの説明の注釈を前にスキップし、その後、TestRuleで適用する方法では、あなたがその注釈をテストし、あなたがやりたいことができますしたいテストのようなものをマーク

テストケース内で@Beforeの設定を元に戻すことでも解決できます。 これは、ここでソリューションの長所と短所があるでしょう、それが見えるかもしれどのよう

@Before 
public void setup() { 
    TestDataSetupClass.setupTestData(); 
} 

@Test 
public void testServiceWithIgnoreCommonSetup() { 
    TestDataSetupClass.unSet(); 
    //Perform Test 
} 

です。これは、不必要な設定と解除のサイクルです。しかし、何百ものテストケースのためだけにそれを行う必要があり、自己AOPを書くことや複数の内部テストクラスを維持するオーバーヘッドを避けなければならない場合はうまくいく。

関連する問題