2011-07-26 11 views
10

jUnitの@Testごとに異なるティアダウンを定義する方法はありますか?@Test in jUnitの別のティアダウン

+0

なぜティアダウンメソッドに '@ org.junit.After'というアノテーションを付けるだけでいいのですか? – Constantiner

+0

@ Constantinerすべてのテストで1つのAfterメソッドしかないためです。そして、私はテストごとに自分のティアダウンを走らなければなりません。 – Daniel

+1

@Daniel、専用のティアダウンで別のテストケースにテストします。 – Constantiner

答えて

30

@Testの後に実行するメソッドを示すには、@Afterアノテーションを使用します。

このような注釈の完全なスイートは、以下のとおりです。

  • @BeforeClass - すべて@Tests
  • @Before
  • を実行される前に - 各 @Test
  • @After
  • を実行する前に - 各 @Test
  • @AfterClass
  • を実行した後、 - すべての後に @Testsが実行されます

私は、私がその質問を理解していないかもしれないことに気付きました。あなたが特定の@Testメソッドに特定のティアダウンメソッドを関連付ける方法を求めている場合は、注釈の必要はありません。

@Test 
public void someTest() { 
    try { 
     // test something 
    } finally { 
     someParticularTearDown(); 
    } 
} 
+1

ありがとうございます。それは私が必要なものです。 – Daniel

+0

テストメソッドごとにこのコードを繰り返す必要があるため、これは必ずしも最適ではありません。 –

+0

最後の例は疑問の可能な解釈をカバーするだけでした - 私は個人的にこれを行うことはめったにありませんでしたが、さまざまなテストのための異なるティアダウン方法があると考えることができます。 – Bohemian

4

グループ化のポイント:単に最終的にあなたの試験方法の最後でそれを呼び出します同じクラスのテストメソッドを一緒に共有できるので、同じセットアップとティアダウンを持つことができます。ですから、各テストで別々のティアダウンを定義することはできますが、@Testメソッドを別のクラスに配置することでそうすることができます。

別のティアダウン方法を使い始めると、同じクラスでテストをまとめてグループ化する理由が明確になりません。クラス内のテストをどのようにグループ化するかについて柔軟に対応することで、このような状況を管理できます。

+0

はい、 '@ Test'メソッドの中にセットアップとティアダウンコードを置くことを検討してください。ただし、tryが... finallyを使用することで、例外がスローされても引き裂かれたコードが呼び出されるように注意してください。 – Raedwald

+1

@Raedwald:はい、ボヘミアンのアプローチはこれを行う方法の1つですが、今度はfinallyブロックを追加する必要があるため、フレームワークのパワーを失ってしまいます。 –

1

これをJUnitで簡単に行う方法はありません。 TestNGを使用すると、メソッドをグループにまとめることができるので、特定の@ BeforeMethod/@ AfterMethodを定義して、特定のグループだけを実行することができます。

関連する問題