2011-07-26 21 views
3

Springバッチを使用しているいくつかのテストクラスがあり、休止状態です。私のテストコンテキストはメモリデータベースにh2を設定し、ほとんどのdbスキーマを作成するhibernateセッションファクトリを初期化し、いくつかの特定のSQLスクリプトを実行してスプリングバッチ(non-orm)に必要なデータベーススキーマオブジェクトを設定します。 Hibernateは、必要なことだけを実行する非常に素晴らしい仕事をしますが、スプリングバッチ初期化スクリプトはスマートではありません。Spring、Springバッチ、Hibernate、JUnit、複数の統合テスト用の初期化

私のテスト構成ではh2組み込みデータベースを使用していますので、すべてを一度安全に初期化できますが、残りの統合インフラストラクチャ(hbmセッションファクトリ、スプリングバッチスキーマなど)を初期化するためには、テスト全体が実行されます。

ユニットテストはすべて個別に実行されますが、同じデータベーススキーマの初期化を繰り返し実行しているので、2〜Nのテストは失敗します。

統合テスト全体のアプリケーションコンテキストを初期化し、特定のテストの詳細設定をMyTest-contextに委任し、単一の統合テストを実行しているときでもメインアプリケーションコンテキストを初期化したいと考えています。 。

私は、アプリケーションサービスをテストするために必要なインフラストラクチャを初期化するために、テストコンテキストにインポートされる一般的なスプリングコンフィギュレーションファイルを持っています。この問題は、パッケージ内のすべてのテストを実行することなどから発生します。テストシステムは、同じ初期化を複数回呼び出します。

これはかなり一般的な問題であり、私は春またはJUnitのドキュメントの詳細を見落としたかったと思います。

答えて

3
  1. デフォルトでは、テスト用にロードされたスプリングcaches ApplicationContext instancesです。新しいテストを開始する唯一の理由は、テストが異なるコンテキストファイルセットを使用するため、別のコンテキストが必要であるか、またはテストで@DirtiesContext annotationを使用するということです。
  2. SQLスクリプトに"if not exists"を追加するだけではどうですか?
+0

これは私のSQLスクリプトではありません。これは、サードパーティ製のjarファイルからサポートされているデータベースフレーバのセットから実行時に選択されます。サポートされているデータベースごとに、データベースオブジェクト、インデックス、制約などの存在チェックを追加するスクリプトを作成および削除するスクリプトを書き直すことができましたが、私はマイナーな調整ソリューションをさらに望んでいました。 「最後のBean定義の勝ち」とアプリケーションコンテキストキャッシュの組み合わせは、私が今見ているものです。 – gbegley

関連する問題