2011-11-14 8 views

答えて

6

TestRuleでこれを行うことができます。 TestRuleを使用すると、テストメソッドの前後にコードを実行できます。テストで例外(またはアサーションに失敗した場合はAssertionError)がスローされた場合、テストは失敗し、tearDown()はスキップできます。例は次のようになります。あなたがメソッドの@After注釈を持っている必要はありませんので、あなたは、手動でティアダウンを呼んでいる

public class ExpectedFailureTest { 
    public class ConditionalTeardown implements TestRule { 
     public Statement apply(Statement base, Description description) { 
      return statement(base, description); 
     } 

     private Statement statement(final Statement base, final Description description) { 
      return new Statement() { 
       @Override 
       public void evaluate() throws Throwable { 
        try { 
         base.evaluate(); 
         tearDown(); 
        } catch (Throwable e) { 
         // no teardown 
         throw e; 
        } 
       } 
      }; 
     } 
    } 

    @Rule 
    public ConditionalTeardown conditionalTeardown = new ConditionalTeardown(); 

    @Test 
    public void test1() { 
     // teardown will get called here 
    } 

    @Test 
    public void test2() { 
     Object o = null; 
     o.equals("foo"); 
     // teardown won't get called here 
    } 

    public void tearDown() { 
     System.out.println("tearDown"); 
    } 
} 

注意、それ以外の場合は二回呼び出されます。より多くの例については、ExternalResource.javaExpectedException.javaをご覧ください。

+0

ありがとうございます。それは良い助けだった..まさに私が必要なもの.. – vpradhan

関連する問題