複数の Spring Bean 定義 xml ファイルにまたがる大規模なアプリケーションがあります。私のテスト スイートでは、FileSystemXmlApplicationContext を使用して必要な XML ファイルを手動でロードし、実行したいテストを実行します。これにより、テストのセットアップ時間が短縮され、本番環境で使用されているのとまったく同じ構成ファイルを使用できるようになります。
今、私は Spring のトランザクショナル テスト基本クラスを使用しようとしています。このクラスは、構成の場所を取り、コンテキストをロードします。なんらかの理由で、アプリケーション コンテキストが作成されるときに、Spring が設定ファイルを見つけることができません。FileSystemXmlApplicationContext を使用して自分で構成をロードするときと同じ作業ディレクトリからテストを実行するため、これは混乱を招きます。すべての構成場所の前に「file:」を追加すると、テストで指定したパスが見つかりますが、構成で定義された Bean によってインポートまたは参照されるファイル (プロパティ ファイルなど) は見つかりません。どうしたんだ?Spring コンテキスト テスト クラスを拡張して、自分でコンテキストを作成した場合と同じように機能するテストを取得できますか?
たとえば、次のようなコンテキストを作成するとうまくいきます。
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[] { "WEB-INF/services-context.xml"})
AbstractTransactionalDataSourceSpringContextTests を拡張すると、以下は services-context.xml を見つけられません。
@Override
protected String[] getConfigLocations() {
return new String[] { "WEB-INF/services-context.xml"};
}
これは services-context を見つけますが、そこで定義されている PropertyPlaceholderConfigurer はそのプロパティ ファイルを見つけることができません。
@Override
protected String[] getConfigLocations() {
return new String[] { "file:WEB-INF/services-context.xml"};
}