0

データベースアプリケーションのテストに JUnit 4 を使用しています。各テストには実行前にデータベースの特別なプリセットが必要なので、@Before最初にデータをロードする方法と@After、データベースからすべてのデータを削除する方法を使用しています。いくつかの理由で DBUnit を使用できませんが、データベースのロードとクリーンアップの作業を行うカスタム Java 実装を使用する必要があります。メソッドでこのカスタム実装からクラスのインスタンスを作成できますが、@Beforeメソッドで同じインスタンスを取得することが重要です@After

私の最初のアイデアは、フィールド (例: myObject) をテスト クラスで使用し、それをメソッドで設定して、メソッドで再度@Before使用できるようにすることでした。@Afterただし、JUnit のライフサイクルと、テストが並行して実行されたときの動作 (myObject上書きされる場合) についてはわかりません。

もう 1 つのアイデアはTestWatcher、メソッド内でこのオブジェクトのインスタンスを作成し、startingそれをフィールドにも保存する JUnit を使用することです。次に@Rule、テスト クラスで を使用して、実装の getter メソッドを介してこのインスタンスにアクセスしますTestWatcher

したがって、私の質問は基本的に次のとおりです。

1) メソッドにデータベースを事前設定し、@Beforeメソッド内のすべてのデータを削除することは適切@Afterですか? したがって、次のテストで少量のデータのみをロードする必要がある場合は、はるかに高速に実行されます。

@After2)メソッドで作成されたメソッド内のオブジェクトの同じインスタンスにアクセスするにはどうすればよいですか@Before。テストが並行して実行される場合でも、同じインスタンスであることを保証する必要があります。私の2つのアイデアのいずれかがそれを実装するための良い方法ですか? どちらが優れていますか?

ありがとう!

4

1 に答える 1

3
  1. 私見、いいえ。DbSetup を使用するときに推奨する良い方法 (詳細な説明についてはhttp://dbsetup.ninja-squad.com/user-guide.html#dont-cleanup-prepareを参照) は、データベースをクリアして挿入することです。テスト前に必要なデータを削除し、テスト後は何もしません。そうすれば、テストを開始するときに必要なものがデータベースに正確に含まれていることを確認でき (前のテストでクリーンアップに失敗した場合でも)、問題を診断するために、失敗したテストの後にデータベースを調べることができます。

  2. フィールドを使用します。JUnit は、テストごとにテスト クラスの新しいインスタンスを作成します。

于 2015-07-24T07:47:13.437 に答える