在Chapter 1: 基本用法 – 使用Spring Boot Testing工具裡提到:
除了單元測試(不需要初始化ApplicationContext的測試)外,儘量將測試配置和生產配置保持一致。比如如果生產配置裡啟用了AutoConfiguration,那麼測試配置也應該啟用。因為只有這樣才能夠在測試環境下發現生產環境的問題,也避免出現一些因為配置不同導致的奇怪問題。
那麼當我們想在測試程式碼裡關閉Auto Configuration如何處理?
-
方法1:提供另一套測試配置
-
方法2:使用
@OverrideAutoConfiguration
方法1雖然能夠很好的解決問題,但是比較麻煩。而方法2則能夠不改變原有配置、不提供新的配置的情況下,就能夠關閉Auto Configuration。
在本章節的例子裡,我們自己做了一個Auto Configuration類,AutoConfigurationEnableLogger:
@Configuration
public class AutoConfigurationEnableLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(AutoConfigurationEnableLogger.class);
public AutoConfigurationEnableLogger() {
LOGGER.info("Auto Configuration Enabled");
}
}
並且在META-INF/spring.factories
裡註冊了它:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
me.chanjar.annotation.overrideac.AutoConfigurationEnableLogger
這樣一來,只要Spring Boot啟動了Auto Configuration就會列印出日誌:
2017-08-24 16:44:52.789 INFO 13212 --- [ main] m.c.a.o.AutoConfigurationEnableLogger : Auto Configuration Enabled
例子1:未關閉Auto Configuration
原始碼見BootTest:
@SpringBootTest
@SpringBootApplication
public class BootTest extends AbstractTestNGSpringContextTests {
@Test
public void testName() throws Exception {
}
}
檢視輸出的日誌,會發現Auto Configuration已經啟用。
例子2:關閉Auto Configuration
然後我們用@OverrideAutoConfiguration關閉了Auto Configuration。
原始碼見BootTest:
@SpringBootTest
@OverrideAutoConfiguration(enabled = false)
@SpringBootApplication
public class BootTest extends AbstractTestNGSpringContextTests {
@Test
public void testName() throws Exception {
}
}
再檢視輸出的日誌,就會發現Auto Configuration已經關閉。
參考文件
-
Context configuration with test property sources