2009-10-10 6 views
27

私は、@Beforeと記された方法に分解した共通のセットアップコードをいくつか持っています。ただし、すべての単一のテストでこのコードを実行する必要はありません。特定のテストの前に@Beforeメソッドが実行されるようにマークする方法はありますか?JUnit:@いくつかのテストメソッドの場合にのみ前に?

答えて

28

セットアップコードを必要としないテストを別のテストクラスに移動するだけです。テストに共通する他のコードがあれば、ヘルパークラスに移動してください。

+4

+1言い換えれば、@Beforeの振る舞いを望まない場合は@Beforeを使用しないでください。 –

+0

本当に役に立ちます@Kirschstein :( - 「最初に正しいことを」 –

3

TestNGを使用してください。これにより、テストの細かい制御が可能になります。

1

JUnitからAssume経由でも実現できます。そして、@Beforeを処理するメソッド名を確認することができます。

public class MyTest { 
    @Rule 
    public TestName testName = new TestName(); 

    @Before 
    public void setUp() { 
     assumeTrue(testName.getMethodName().equals("myMethodName")); 
     // setup follows 
    } 
} 

@Rule詳細洞察のためtopicを確認してください。

+0

Do not useそれは、@Beforeメソッドだけでなく、実行中のテスト全体を停止させることを前提としています。 – jMcK

+0

私は率直に見つけることができます(つまり、スペースを許してください)。 before-after関数を必要とするテストで直接呼び出して、BeforeアノテーションとAfterアノテーションを削除するだけで、 "テスト - テスト名 - イコール"のアイデアは無意味です。 – aliteralmind

0

@Beforeについてはわかりませんが、最近、@Afterブロックを選択的に実行するための戦略が策定されました。実装は簡単でした。私はいくつかのフラグをテストクラスの一部としてデフォルト値に設定しました。それらは@Beforeクラスのデフォルト値にリセットされます。私は旗に固有のことをする必要があるクラスで、私はそれぞれの仕事を行うためにフラグ値をチェックする@Afterでそれらのフラグ&を設定します。

関連する問題