2011-02-07 9 views
0

異なるBeforeClass、AfterClass、Before、Afterフックで複数のモジュールで実行したいJunit 4テストクラスがあります。 @Rule注射では、テストメソッドをラップするだけですが、BeforeClassとAfterClassの動作はありません。モジュール内でJunitテストスイートの実行をカスタマイズする

また、私はテストランナーでこれをやりたいとは思いません。それ以来、私は大きなテストセットに使用するテストランナーを固定しています。

ターゲットモジュール内の各テストクラスをサブクラス化し、カスタマイズを適用すると、良い解決策がないようです。

は最高のは、単にターゲット・モジュール内でこのような何か

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    investmentTests.class, 
    catalogTests.class, 
    markerTests.class 
}) 
public class AllTests { 
    // why on earth I need this class, I have no idea! 
} 

を宣言し、コードの前/後に適用するためにいくつかの環境のフックを持っているだろう。

この問題の解決策を見つけましたか?

+1

をJUnitの4.9は、クラスレベルのルールを持っています。 – NamshubWriter

+0

NamshubWriterがコメントしたクラスレベルのルールが必要ですか? –

+0

クラスレベルのルールはちょうど私が必要とするようです。コメントありがとう。 –

答えて

2

NamshubWriterがコメントしたように、org.junit.ClassRuleはJUnit4.9にあります。 @Ruleの代わりに@ClassRule; MethodRuleの代わりにTestRuleです。

サンプルを参照してください:

public static class CustomCounter extends TestRule { 
    public int count = 0; 

    @Override 
    protected Statement apply(final Statement base, Description description) { 
     return new Statement() {     
      @Override 
      public void evaluate() throws Throwable { 
       count++; 
       base.evaluate(); 
      } 
     }; 
    }  
} 

public static class ExampleTestWithCustomClassRule { 
    @ClassRule 
    public static CustomCounter counter= new CustomCounter(); 

    @Test 
    public void firstTest() { 
     assertEquals(1, counter.count); 
    } 

    @Test 
    public void secondTest() { 
     assertEquals(1, counter.count); 
    } 
} 
関連する問題