Spring、Spring Boot和TestNG測試指南 – @OverrideAutoConfiguration

chanjarster發表於2017-09-01

Github地址

Chapter 1: 基本用法 – 使用Spring Boot Testing工具裡提到:

除了單元測試(不需要初始化ApplicationContext的測試)外,儘量將測試配置和生產配置保持一致。比如如果生產配置裡啟用了AutoConfiguration,那麼測試配置也應該啟用。因為只有這樣才能夠在測試環境下發現生產環境的問題,也避免出現一些因為配置不同導致的奇怪問題。

那麼當我們想在測試程式碼裡關閉Auto Configuration如何處理?

  1. 方法1:提供另一套測試配置

  2. 方法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已經關閉。

參考文件

相關文章