データベースアプリケーションのテストに JUnit 4 を使用しています。各テストには実行前にデータベースの特別なプリセットが必要なので、@Before
最初にデータをロードする方法と@After
、データベースからすべてのデータを削除する方法を使用しています。いくつかの理由で DBUnit を使用できませんが、データベースのロードとクリーンアップの作業を行うカスタム Java 実装を使用する必要があります。メソッドでこのカスタム実装からクラスのインスタンスを作成できますが、@Before
メソッドで同じインスタンスを取得することが重要です@After
。
私の最初のアイデアは、フィールド (例: myObject
) をテスト クラスで使用し、それをメソッドで設定して、メソッドで再度@Before
使用できるようにすることでした。@After
ただし、JUnit のライフサイクルと、テストが並行して実行されたときの動作 (myObject
上書きされる場合) についてはわかりません。
もう 1 つのアイデアはTestWatcher
、メソッド内でこのオブジェクトのインスタンスを作成し、starting
それをフィールドにも保存する JUnit を使用することです。次に@Rule
、テスト クラスで を使用して、実装の getter メソッドを介してこのインスタンスにアクセスしますTestWatcher
。
したがって、私の質問は基本的に次のとおりです。
1) メソッドにデータベースを事前設定し、@Before
メソッド内のすべてのデータを削除することは適切@After
ですか? したがって、次のテストで少量のデータのみをロードする必要がある場合は、はるかに高速に実行されます。
@After
2)メソッドで作成されたメソッド内のオブジェクトの同じインスタンスにアクセスするにはどうすればよいですか@Before
。テストが並行して実行される場合でも、同じインスタンスであることを保証する必要があります。私の2つのアイデアのいずれかがそれを実装するための良い方法ですか? どちらが優れていますか?
ありがとう!