2

小型検索エンジンのさまざまな部分をテストしていますが、JUnit テストの一部が他のテストに干渉するエントリをインデックスに残しています。テスト間でオブジェクトをクリアするための JUnit/Maven の規則はありますか?

4

3 に答える 3

2

これに役立つ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@TestsetUp


注釈を使用できない場合、代替手段は古き良きtearDown方法を使用することです。

public void tearDown() {
    index.clear(); //Assuming you have a collection.
}

これは JUnit フレームワークによって提供され、 で注釈が付けられたメソッドのように動作し@Afterます。

于 2013-07-31T15:59:08.930 に答える
1

@Before アノテーションを使用して、各テストがクリーンな状態から実行されることを保証する必要があります。参照してください:テスト フィクスチャ.

于 2013-07-31T15:58:49.480 に答える
1

junit テスト クラス内で、メソッドsetupteardown. 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
}

これは、テスト間のデータをクリアするのに役立ちますが、すべてのテスト内でフィールドを再初期化する必要がなくなります。

于 2013-07-31T16:00:36.147 に答える