2016-09-12 14 views
1

私は、青色と青色以外のデバイスのテストケースを含むテストクラスを用意しています。パラメータisBlueが設定されている場合は、@Blueアノテーションを持つテストケースのみを実行する必要があります。この機能を実現するこのアノテーションを実装する方法がわかりません。この例では条件に従ってユニットテストを実行してください。

public class TestClass { 

    boolean isBlue = false; 

    @Before 
    public void setUp() { 
     isBlue = MyApplication.instance().isBlue(); 
    } 

    @Test 
    public void testA() { ... } 

    @Test @Blue 
    public void testB() { ... } 
} 

isBluetrueであるならば、それだけで、それ以外の場合は

+0

を使用することで、私はそれらを使用していないが、これはJUnitの[カテゴリ](HTTPSのユースケースかもしれません:// githubの。 com/junit-team/junit4/wiki/categories)を参照してください。継承でこれを解決することもできます。 –

+2

ここで役立つアプローチがいくつかありますが、私はあなたのテストが青色デバイスのテストと青色デバイス以外のテストの2つに分割されるべきだと考えています。おそらくMockオブジェクトの使用をトリガーし、オブジェクトの動作/プロパティ( 'MyApplication'など)をシミュレートすることができます。 –

答えて

0

JUnitのランナーを見てみましょうすべてのテストケースを実行する必要がありtestB()を実行する必要があります。 Nice explanation of runners

BlockJUnit4ClassRunnerに延長する独自のランナーを作成することができます。

あなたはさらに、カスタム注釈が設定されている方法でフィルタリングするには

@Override 
    protected List<FrameworkMethod> getChildren() { 
    // scan test class for methonds annotated with @Test 
    } 

を上書きすることができ、アプリケーション内では、あなたの財産も同様に設定されています。

0

あなたは間違った方向にいると思います。

問題の特定に役立つテストケースが必要です。 を修正するのを手伝ってください。その目的からあなたを「散漫させる」ものは、​​単体テストの価値を低下させます。

したがって、実際に「異なる」スコープを持つテストを同じテストクラスに入れないでください。特に、「MyApplication.instance()」が返すものをどのように制御するのでしょうか?それはそれ自体の問題のように思えます。

意味:2つの独立したテストが必要です。それらは何かを伝える「静的な」オブジェクトに依存しません。彼らは範囲内のものをテストします。他には何もない。

関連する問題