Spring、Spring Boot和TestNG測試指南 - @OverrideAutoConfiguration 原 薦

碼雲地址

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已經關閉。

參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章