2012-03-28 12 views
30

私のプロジェクトでは、すべてのテストを行う前にいくつかのリポジトリ設定を行う必要があります。これはいくつかのトリッキーな静的ルールを使って行われます。しかし、私はすべてのテストの後にクリーンアップを行う方法の手がかりを持っていない。私はすべてのテストメソッドの数を参照して、魔法の静的な数値を保持したくないので、私は常に維持する必要があります。すべてのjunitテスト後のクリーンアップ

最も評価の高い方法は、すべてのテストの後に呼び出されるリスナーを追加することです。すでにJUnit4にはそれ用のインターフェースはありますか?


編集:私は@AfterClassアノテーションを付けるメソッドが最後に呼び出された場合は知っている必要があります原因これは、@BeforeClassと@AfterClassとは何の関係もありません。

+0

クリーン** TestNGの**ソリューションはここで見つけることができます:http://stackoverflow.com/a/26381858/1857897 – dedek

答えて

30

私はJUnit 4.9を使用しています。ウィルこのヘルプ?:

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({First.class,Second.class,Third.class}) 
public class RunTestSuite extends TestCase { 
    @BeforeClass 
    public static void doYourOneTimeSetup() { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  
} 

編集:私は非常にポジティブだ私の解決策は、あなたが探しているものであることを(私はあなたが質問を誤解しない限り)。つまり、すべてのテストが終了した後に1つのティアダウンメソッドが実行されます。リスナーは必要ありませんが、JUnitにはこの機能があります。ありがとう。

+1

私はあなたを誤解しない限り、これは、あなたの目標を達成するかなり確信しています質問。 – HellishHeat

+6

私はすべてのテストクラスを列挙しなければなりません(これは現在もいくつかありますが、数が急増します)ので、残念ながら受け入れられません。 –

+1

あなたは何をしようとしているのか分かりません。なぜあなたは何かを列挙しなければならないのか分かりません。テストの終了後、すべてのテストを実行した後に静的な振る舞いを実行したいと思っているように、あなたの質問にもっと詳しく説明することをお勧めします。それがあなたが指定したものです。それが事実なら、私の解決策はそれを行います。各テストの後にAfterClassを実行していないことに注意してください。 AllTestでAfterClassアノテーションを使用しています。だから、すべてのテストの後に呼ばれます。たぶん私はちょうどそれを取得しない:) – HellishHeat

1

カスタムTestRunnerはいつでも書くことができます。しかし、その前に、同じことの必要性を評価する必要があります。 @BeforeClassと@AfterClassを使用する方が良いです。私が指すことのできるもう1つの例は、hibernateが 'import.sql'を使用して単体テストを行うことを可能にするファッションです。 JUnit Javaのドキュメントで、より直接的

public class TestListener extends RunListener { 
    @Override 
    public void testRunStarted(Description description) throws Exception { 
    // Called before any tests have been run. 
    } 
    @Override 
    public void testRunFinished(Result result) throws Exception { 
    // Called when all tests have finished 
    } 
} 

読む:

34

は私がorg.junit.runner.notification.RunListener、例を使用することをお勧めします。 あなたも、プラグインの設定に次のコードを追加してMavenの確実な(ユニットテスト)プラグインやフェイルセーフプラグイン(統合テスト)とすることを使用することができます。

<properties> 
    <property> 
    <name>listener</name> 
    <value>com.innovatrics.afismq.it.TestListener</value> 
    </property> 
</properties> 
+1

私はこのソリューションがはるかに良いのが好きです。すべてのクラスに名前を付ける必要はありません – committedandroider

1

スイートを使用する必要はありません、ただ@BeforeClass、および@AfterClassを追加静的

public class Tests { 

    @BeforeClass 
    public static void doYourOneTimeSetup() 
    { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  

    @Test 
    public void testYourTestcase() 
    { 
     ... 
    } 
} 
+1

複数のテストクラスがある場合、これは機能しません。 –

+0

はいクラスの対象です – serup

関連する問題