2012-12-14 23 views
10

メソッドが@Beforeと注釈されたクラスでJUnit @Testメソッドを実行できますが、このテストでは@Beforeメソッドを無視しますか?@ Before/@ Afterを無視するJunit @Testを実行する

編集:JUnitがこの機能をサポートしている場合は、、回避策ではないと私は興味があります。私は、別のクラスでテストを移動する、またはアノテーションを削除し、各テストメソッドで手動でsetUp()を呼び出すような回避策を認識しています。

クラス内には30個のテストがあり、そのうちの29個については@Beforeがテストの初期化を非常に簡略化しますが、1つ(または複数)は役に立たない/複雑です。

public class MyTestClass { 

    @Before 
    public void setUp() { 
     //setup logic 
    } 

    @Test 
    public void test1() { 
     //[...] 
    } 

    @Test 
    public void test2() { 
     //[...] 
    } 

    //more tests here 

    @Test(ignoreBefore = true, ignoreAfter = true //false by default) 
    //something equivalent to this 
    public void test20() { 
     //[...] 
    } 

} 
+0

'@ Before'と' @ After'アノテーションなしで 'test20'を別のクラスに移動できますか? – user1516873

+0

@ user1516873技術的にははいですが、クラスのすべてのテストを1つのテストクラスに保存したいと考えています。クラスが設計/開発されたとき、テストは考慮されず、リファクタリングも解決策ではありません。また、単体テストの定義によれば、単体テストは独立しており、別々に実行することができます。 – m3th0dman

答えて

5

これはTestRuleで実行できます。私の答えはExclude individual test from 'before' method in JUnitです。基本的にはExternalResourceを実装し、applyメソッドでメソッドに特定の注釈があるかどうかをチェックし、もしあればbefore/afterメソッドを実行しないでください。あなたは特にあなたのルールから前/後を呼び出す必要があります。

2

役に立たなかったら、それは問題ではありません。もう一度setUpを実行すると害がありますか?

しかし、私はそれが可能ではないと思って、私を窮屈な機能として探します。

別のアプローチ - 別のテストクラスにテストを移動します。

+1

+1私は間違いなく別のテストクラスの面で間違いがあります。明らかに、他のテストには、それらを一緒にグループ化する必要がある類似点があります。あなたの奇妙な1つのテストはしません。 –

+0

JUnitが回避策ではなく、この機能を提供しているのかどうか不思議です。なぜそれが危機的な特徴のように見えるだろうか?単体テストの基本的な定義では、単体テストが互いに完全に独立していなければならないという考えはありませんか?他のテストでは、メソッドの一部が@メソッド以前に呼び出されているかどうかは気にしてはいけません。 – m3th0dman

+0

@ m3th0dmanこれはテスト間の依存関係ではなく、テストのコンテキストからの依存関係です。テストは、setUpメソッドを使用してクラスに配置されます。なぜそれが実行されないのですか?非常に驚くように見えます。ソフトウェア開発の驚きは不愉快です。 – kan

関連する問題