4

私は周りを検索しましたが、次のアプローチが可能/良い方法であるかどうかを判断できませんでした. 基本的に私がやりたいことは次のとおりです。

DBUnit を使用してデータを初期化する JUnit テストを作成します。同じ初期データセットから実行される複数のテスト メソッドをそれぞれ実行します。各テスト メソッドの後にロールバックして、最初の setUp 関数の直後の状態に戻します。すべてのテスト メソッドが実行された後、setUp 関数で行われたすべての変更をロールバックします。この時点で、データベース内のデータは、JUnit テスト クラスを実行する前とまったく同じである必要があります。

各テスト ケースの前にデータを再初期化する必要がないのが理想的です。

個々のテスト メソッドをロールバックできましたが、すべてのテスト メソッドの実行後に setUp で行った変更をロールバックできませんでした。

注: CLEAN_INSERT、DELETE などの DBUnit のさまざまな機能を認識しています。Spring フレームワークを使用してデータソースを挿入しています。

レイアウトの例は次のようになります。

public class TestClass {

    public void setUp() {
        // Calls a method in a different class which uses DBUnit to initialize the database
    }

    public void runTest1() {
        // Runs a test which may insert / delete data in the database
        // After running the test the database is in the same state as it was
        // after running setUp
    }

    public void runTest2() {
        // Runs a test which may insert / delete data in the database
        // After running the test the database is in the same state as it was
        // after running setUp
    }

    // After runTest1 and runTest2 have finished the database will be rolled back to the
    // state before any of the methods above had run.
    // The data will be unchanged as if this class had never even been run
}

開発データベースでテストを実行しますが、現在データベースにあるデータには影響を与えたくないです。最初に CLEAN_INSERT を実行してデータを初期化しても問題ありませんが、すべてのテスト メソッドを実行した後、データを JUnit テストを実行する前の状態に戻したいと考えています。

前もって感謝します

4

2 に答える 2

1


oVirtオープン ソース プロジェクト で同様の問題を解決しました。engine\backend\manager\modules\dal\src\test\java\org\ovirt\engine\core\dao\BaseDAOTestCase.java にあるコードを見てください。
一般的に、@BeforeClass および @AfterClass メソッドで行ったことを見てください。メソッドごとに使用できます。そのために Spring-test フレームワークを使用しました。

于 2012-06-18T18:50:27.433 に答える
1

「setUp」JUnit が各テスト メソッドの後に実行される「tearDown」メソッドを提供するのと同じように。ロールバックに使用できます。また、JUnit 4 以降では、次の注釈があります。

  • @BeforeClass: テスト ケースでテストを実行する前に 1 回実行します。
  • @Before: テストメソッドの前に毎回実行
  • @After: テストメソッドの後に毎回実行
  • @AfterClass: 現在のスイート内のすべてのテストが実行された後に 1 回実行します
于 2012-06-18T18:59:30.943 に答える