コンテキスト管理

各 TestContext は、担当するテストインスタンスのコンテキスト管理とキャッシュサポートを提供します。テストインスタンスは、構成された ApplicationContext へのアクセスを自動的に受け取りません。ただし、テストクラスが ApplicationContextAware インターフェースを実装する場合、ApplicationContext への参照がテストインスタンスに提供されます。AbstractJUnit4SpringContextTests および AbstractTestNGSpringContextTests は ApplicationContextAware を実装しているため、ApplicationContext へのアクセスを自動的に提供することに注意してください。

@Autowired ApplicationContext

ApplicationContextAware インターフェースを実装する代わりに、次の例に示すように、フィールドまたは setter メソッドの @Autowired アノテーションを使用して、テストクラスのアプリケーションコンテキストを注入できます。

  • Java

  • Kotlin

@SpringJUnitConfig
class MyTest {

	@Autowired (1)
	ApplicationContext applicationContext;

	// class body...
}
1ApplicationContext の注入。
@SpringJUnitConfig
class MyTest {

	@Autowired (1)
	lateinit var applicationContext: ApplicationContext

	// class body...
}
1ApplicationContext の注入。

同様に、テストが WebApplicationContext をロードするように構成されている場合、次のようにテストに Web アプリケーションコンテキストを挿入できます。

  • Java

  • Kotlin

@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	WebApplicationContext wac;

	// class body...
}
1WebApplicationContext の構成。
2WebApplicationContext の注入。
@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	lateinit var wac: WebApplicationContext
	// class body...
}
1WebApplicationContext の構成。
2WebApplicationContext の注入。

@Autowired を使用した依存性注入は、デフォルトで構成されている DependencyInjectionTestExecutionListener によって提供されます(テストフィクスチャの依存性注入を参照)。

TestContext フレームワークを使用するテストクラスは、特定のクラスを継承したり、特定のインターフェースを実装してアプリケーションコンテキストを構成したりする必要はありません。代わりに、構成はクラスレベルで @ContextConfiguration アノテーションを宣言することで実現されます。テストクラスがアプリケーションコンテキストリソースの場所またはコンポーネントクラスを明示的に宣言しない場合、構成された ContextLoader は、デフォルトの場所またはデフォルトの構成クラスからコンテキストをロードする方法を決定します。コンテキストリソースの場所とコンポーネントクラスに加えて、アプリケーションコンテキストは、アプリケーションコンテキスト初期化子を通じて構成することもできます。

以下のセクションでは、Spring の @ContextConfiguration アノテーションを使用して、XML 構成ファイル、Groovy スクリプト、コンポーネントクラス(通常 @Configuration クラス)、またはコンテキスト初期化子を使用して、テスト ApplicationContext を構成する方法について説明します。または、高度なユースケース用に独自のカスタム SmartContextLoader を実装および構成できます。