2013-01-10 21 views
5

各JUnitテストを実行する前に、何らかのアクションを実行する必要があるプロジェクトに取り組んでいます。この問題は、JUnitコアに追加できるRunListenerを使用して解決されました。プロジェクトアセンブリは、Mavenを使用して行われているので、私は私のpomファイルにこのラインを持っている:だからIntelliJ IDEAでJUnit RunListenerを使用する

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>cc.redberry.core.GlobalRunListener</value> 
        </property> 
       </properties> 
      </configuration> 
     </plugin> 

、すべてが使用して動作します:

mvn clean test 

しかし、テストは、内部テストを使用して(IntelliJのを使用して開始されますランナー)は、RunListenerでコード化されたアクションは実行されないため、IntelliJインフラストラクチャを使用してテストを実行することはできません。

IntelliJはこの設定をpomファイルから解析しないため、IntelliJにJUnitコアにRunListenerを追加するよう明示的に指示する方法はありますか?構成でいくつかのVMオプションを使用している可能性がありますか?

maven出力を読み込む代わりに、美しいIntelliJテスト環境を使用するほうがずっと便利です。

P.S.私が実行する必要があるアクションは、基本的に静的環境(クラス内のいくつかの静的フィールド)のリセットです。

答えて

3

IntellijでRunListenerを指定する方法はありませんでしたが、別の解決方法は、独自の顧客ランナーを作成し、テストで@RunWith()に注釈を付けることです。

public class MyRunner extends BlockJUnit4ClassRunner { 
    public MyRunner(Class<?> klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
     // run your code here. example: 
     Runner.value = true;    

     super.runChild(method, notifier); 
    } 
} 

サンプル静的変数:

public class Runner { 
    public static boolean value = false; 
} 

次に、このようなあなたのテストを実行します。これは、あなたがRunListenerせずに静的な初期化を行うことができます

@RunWith(MyRunner.class) 
public class MyRunnerTest { 
    @Test 
    public void testRunChild() { 
     Assert.assertTrue(Runner.value); 
    } 
} 

+0

ありがとうございました! '@ Before'メソッドを指定して、すべてのテストクラスにグローバル親を1つ追加することを考えています。だから、私はすべてのテストファイルを編集する必要があります:(私はこの機能を追加するIntelliJバグトラッカーでチケットを作成します。 – dbolotin

関連する問題