上下文管理

每個 TestContext 為其負責的測試例項提供上下文管理和快取支援。測試例項不會自動獲得對配置的 ApplicationContext 的訪問許可權。但是,如果測試類實現了 ApplicationContextAware 介面,則會將 ApplicationContext 的引用提供給測試例項。請注意,AbstractJUnit4SpringContextTestsAbstractTestNGSpringContextTests 實現了 ApplicationContextAware,因此會自動提供對 ApplicationContext 的訪問許可權。

@Autowired ApplicationContext

作為實現 ApplicationContextAware 介面的替代方案,您可以透過 @Autowired 註解在欄位或 setter 方法上注入測試類的應用上下文,示例如下

  • Java

  • Kotlin

@SpringJUnitConfig
class MyTest {

	@Autowired (1)
	ApplicationContext applicationContext;

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

	@Autowired (1)
	lateinit var applicationContext: ApplicationContext

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

同樣,如果您的測試配置為載入 WebApplicationContext,您可以將 Web 應用上下文注入到您的測試中,如下所示

  • Java

  • Kotlin

@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	WebApplicationContext wac;

	// class body...
}
1 配置 WebApplicationContext
2 注入 WebApplicationContext
@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	lateinit var wac: WebApplicationContext
	// class body...
}
1 配置 WebApplicationContext
2 注入 WebApplicationContext

使用 @Autowired 進行的依賴注入由 DependencyInjectionTestExecutionListener 提供,它預設已配置(參見 測試夾具的依賴注入)。

使用 TestContext 框架的測試類不需要擴充套件任何特定類或實現特定介面來配置其應用上下文。相反,配置是透過在類級別宣告 @ContextConfiguration 註解來實現的。如果您的測試類沒有顯式宣告應用上下文資源位置或元件類,則配置的 ContextLoader 會決定如何從預設位置或預設配置類載入上下文。除了上下文資源位置和元件類之外,應用上下文還可以透過應用上下文初始化器進行配置。

以下部分解釋瞭如何使用 Spring 的 @ContextConfiguration 註解,透過 XML 配置檔案、Groovy 指令碼、元件類(通常是 @Configuration 類)或上下文初始化器來配置測試 ApplicationContext。或者,對於高階用例,您可以實現和配置自己的自定義 SmartContextLoader