2011-01-13 43 views
1

Mavenを使用して一連のSelenium(jUnit4)テストを実行した後、データベースのクリーンアップ(挿入したものを削除するなど)を行いたいと思います。これは、Tapestry/Spring/Hibernateと従来のデータベースで動作する古いプロジェクトです。私は@After注釈付きメソッドでクリーンアップを行いたいですが、DAO/Managers/SessionFactoryの注入は機能しません。Seleniumテスト後のデータベースクリーンアップ

テストは次のようになります:1台のコンソールでアプリケーションを実行し(mvn jetty:run-war)、別のコンソール(mvn test)でテストを開始します。これはlocalhost:8080上のアプリケーションにアクセスします。

+0

:たとえば

http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit- 4-x – sblundy

+0

あなたはあなたの問題を解決するヒントを探しています:「DAO/Managers/SessionFactoryの注入は機能しません」またはテストデータを設定してリセットするための他の方法はありますか? – Ralph

答えて

6

いくつかの可能なアプローチ:テスト間知っている状態にデータベースを返すように設計されて

  1. 使用dbunit、。
  2. 最後にトランザクションをロールバックするtry{} finally{}ブロックを持つデータベーストランザクションで各テストをラップします。
  3. 厳密にテスト用にデータベースを使用し、それについて心配しないでください。テストで毎回一意に識別された/名前付きの値を作成して、競合がないようにします。それ以外の場合は何もしません。
+2

+1戦略3(時には戦略2)を使用しますが、それについて多くの議論があります。システムを元の状態に戻すことを常に保証することはできません(例えば、トランザクションをコミットするビジネスメソッドがあり、それをテストする必要がある場合、プログラムがコミット後にクラッシュした後、あなたのDBのジャンク)。 DBに迷惑をかけることがある場合は、テストデータベースを使用する必要があります。その後、クリーンアップコードを書く時間を緩和して保存することもできます。 –

+1

@Adrian Smith:同意します。それを考えるもう一つの方法は、プログラマー、テスターなどの人が多くなればなるほど、何かをすることは役に立たなくなるので、#3で終わる可能性が高くなります。 – orangepips

+2

戦略3のための+1。なぜテストベッドが心配ですか? – Rajasankar

0

私はむしろメソッド宣言上記

@Transactional

注釈を使用します。テストごとにロールバックを実行します。それは私のためにうまく動作します。あなたはこの質問を見てみることができます

@Test 
@Transactional 
public void simpleTest(){  
    // your logic here  
} 
関連する問題