コンポーネントクラス、XML、Groovy スクリプトの混在

テスト用に ApplicationContext を構成するために、コンポーネントクラス (通常は @Configuration クラス)、XML 構成ファイル、または Groovy スクリプトを混在させることが望ましい場合があります。例: レガシーな理由から本番環境で XML 構成を使用する場合、テスト用に特定の Spring 管理コンポーネントを構成するために @Configuration クラスを使用することを決定する場合があります (またはその逆)。

さらに、一部のサードパーティフレームワーク(Spring Boot など)は、異なる型のリソース(たとえば、@Configuration クラス、XML 構成ファイル、Groovy スクリプト)から ApplicationContext を同時にロードするためのファーストクラスのサポートを提供します。Spring Framework は、従来、標準のデプロイに対してこれをサポートしていませんでした。そのため、Spring Framework が spring-test モジュールで提供する SmartContextLoader 実装のほとんどは、テストコンテキストごとに 1 つのリソース型のみをサポートしています。ただし、これはリソース型の混在を使用できないという意味ではありません。一般的なルールの例外として、GenericGroovyXmlContextLoader と GenericGroovyXmlWebContextLoader は、XML 構成ファイルと Groovy スクリプトの両方を同時にサポートします。さらに、サードパーティフレームワークは、classes と locations から @ContextConfiguration までの両方の宣言をサポートすることを選択する場合があります。TestContext フレームワークの標準テストサポートを使用すると、次のオプションが利用できます。

@Configuration クラスとリソースロケーション (たとえば、XML または Groovy) を使用してテストを構成する場合は、エントリポイントとして 1 つを選択し、そのエントリポイントがもう 1 つをインポートまたはインクルードする必要があります。例: @Configuration クラスでは、@ImportResource を使用して XML 構成ファイルまたは Groovy スクリプトをインポートできます。一方、XML または Groovy スクリプトでは、コンポーネントスキャンを使用するか、通常の Spring Bean として定義することにより、@Configuration クラスをインクルードできます。この動作は、本番環境でアプリケーションを構成する方法と意味的に同等であることに注意してください。本番構成では、本番環境の ApplicationContext がロードされる @Configuration クラスのセットまたは XML もしくは Groovy リソースロケーションのセットを定義しますが、他の型の構成をインポートまたはインクルードする自由度は依然としてあります。