7

Spring対応のJUnitテストがあります。デフォルトのapplicationContextをロードします。ここで、テスト用に1つのBean、つまりentityManagerをtestEntityManagerに置き換えたいと思います。

私は3つの可能な方法を想像することができますが、それはあまりエレガントではないようです。

  1. コンテキスト(defaultContext、emContext)を分割し、テストコンテキストファイル(テストリソースのemContext)によってコンテキストファイルをオーバーライドします
  2. ファクトリを使用し、testEntityManagerを選択します(本番コードで)
  3. Springを使用せずに、オブジェクト階層を自分で構築します(最も実行不可能なソリューション)

それを正しく行うためのベストプラクティスはありますか?

この質問の背景は次のとおりです。境界に近いオブジェクト(DB、Webサービスなど)のみを置き換えたいのですが。

敬具

編集:私は今、この方法でそれを解決しました:クラスパスとテストクラスパスにプロパティファイルを追加し、プロパティプレースホルダーと組み合わせてSpringエイリアスを使用しました。このようにして、テストでBeanを別の実装に接続することができました。

4

2 に答える 2

9

複数の場所からコンテキストをロードする場合、SpringではBean定義をオーバーライドできます。

したがって、必ずしもコンテキスト「/applicationContext.xml」を分割する必要はありません。代わりに、テスト「/applicationContext-test.xml」用の追加のアプリケーションコンテキストを用意します。ここで、必要なBeanをオーバーライドします。次に、両方の構成をプルし、テスト構成のBeanを本番構成のBeanにオーバーライドさせます。

@ContextConfiguration({"/applicationContext.xml", "/applicationContext-test.xml"})
于 2012-08-21T12:34:05.750 に答える
0

IMHOのベストプラクティスは、SpringBean定義プロファイルを使用することです。私のドキュメントリンクから、他の読みやすいリソースにアクセスできます。Googleは、 Gordon Dickens:Spring3.1環境プロファイルなどの便利なリンクも提供します。

于 2012-08-21T14:00:01.907 に答える