小型検索エンジンのさまざまな部分をテストしていますが、JUnit テストの一部が他のテストに干渉するエントリをインデックスに残しています。テスト間でオブジェクトをクリアするための JUnit/Maven の規則はありますか?
3 に答える
これに役立つ2つの特定の注釈があり、あなたのような場合に使用することを目的としています:
@After
は、特定のメソッドを毎回実行する必要があることを定義します@Test
。 while@AfterClass
は、テスト クラス全体が実行された後に実行するメソッドです。後者は、これまでテスト間で使用および共有してきた構造またはレコードをパージするための最後のクリーンアップ方法と考えてください。
次に例を示します。
@After
public void cleanIndex() {
index.clear(); //Assuming you have a collection
}
@AfterClass
public void finalCleanup() {
//Clean both the index and, for example, a database record.
}
注: メソッドの前、およびそのクラスで定義された s の実行を開始する前に、関連するメソッドを呼び出すことによって、正反対の対応する (@Before
および) があります。これは、以前のバージョンの JUnit で使用されていたものです。@BeforeClass
@Test
@Test
setUp
注釈を使用できない場合、代替手段は古き良きtearDown
方法を使用することです。
public void tearDown() {
index.clear(); //Assuming you have a collection.
}
これは JUnit フレームワークによって提供され、 で注釈が付けられたメソッドのように動作し@After
ます。
@Before アノテーションを使用して、各テストがクリーンな状態から実行されることを保証する必要があります。参照してください:テスト フィクスチャ.
junit テスト クラス内で、メソッドsetup
とteardown
. setup
すべてのテストの前に実行されますteardown
が、すべてのjunitテストの後に実行されます。
元:
public class JunitTest1 {
private Collection collection;
//Will initialize the collection for every test you run
@Before
public void setUp() {
collection = new ArrayList();
System.out.println("@Before - setUp");
}
//Will clean up the collection for every test you run
@After
public void tearDown() {
collection.clear();
System.out.println("@After - tearDown");
}
//Your tests go here
}
これは、テスト間のデータをクリアするのに役立ちますが、すべてのテスト内でフィールドを再初期化する必要がなくなります。