3

Spring-BatchとHibernateを利用するテストクラスがいくつかあります。私のテストコンテキストは、メモリデータベースにh2を確立し、休止状態のセッションファクトリを初期化します。これにより、ほとんどのdbスキーマが作成され、特定のSQLスクリプトを実行して、Spring Batch(非ORM)に必要なデータベーススキーマオブジェクトをセットアップします。Hibernateは必要なことだけを実行するという非常に優れた仕事をしますが、Spring-Batch初期化スクリプトはそれほど賢くはありません。

私のテスト構成ではh2組み込みデータベースを使用しているため、すべてを1回安全に初期化できますが、残りの統合インフラストラクチャ(hbmセッションファクトリやSpring-Batchスキーマなど)をコレクション全体に対して1回だけ初期化するために、Springに伝達する必要があります。実行中のテスト。

私の単体テストはすべて個別に実行されますが、パッケージ全体をテストすると、同じdbスキーマの初期化を繰り返し実行しているため、テスト2からNは失敗し、(db)オブジェクトでの停止エラーがすでに存在します。

統合テストのコレクション全体のアプリケーションコンテキストを初期化し、特定のテストの詳細の構成をMyTest-contextに委任しますが、単一の統合テストを実行する場合は、メインのアプリケーションコンテキストを初期化します。

アプリケーションサービスのテストに必要なインフラストラクチャを初期化するためにテストコンテキストにインポートされるSpring構成ファイルの共通セットがあります。問題は、パッケージ内のすべてのテストの実行などに起因します。テストシステムは、同じ初期化を複数回呼び出します。

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

4

1 に答える 1

3
  1. デフォルトでは、Springはテスト用にロードされたApplicationContext インスタンスをキャッシュします。新しいものを初期化する唯一の理由は、テストが異なるコンテキスト ファイルのセットを使用するために異なるコンテキストを必要とするか、テストが@DirtiesContext アノテーションを使用することです。
  2. SQLスクリプトに「存在しない場合」を追加しないのはなぜですか?
于 2011-07-26T23:24:48.497 に答える