成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring、Spring Boot和TestNG測(cè)試指南 - @TestConfiguration

wangtdgoodluck / 1241人閱讀

摘要:地址是提供的一種工具,用它我們可以在一般的之外補(bǔ)充測(cè)試專門(mén)用的或者自定義的配置。實(shí)際上是一種,是另一種,在語(yǔ)義上用來(lái)指定某個(gè)是專門(mén)用于測(cè)試的。所以我們?cè)跍y(cè)試代碼上添加,用或者在同里添加類都是可以的。

Github地址

@TestConfiguration是Spring Boot Test提供的一種工具,用它我們可以在一般的@Configuration之外補(bǔ)充測(cè)試專門(mén)用的Bean或者自定義的配置。

@TestConfiguration實(shí)際上是一種@TestComponent,@TestComponent是另一種@Component,在語(yǔ)義上用來(lái)指定某個(gè)Bean是專門(mén)用于測(cè)試的。

需要特別注意,你應(yīng)該使用一切辦法避免在生產(chǎn)代碼中自動(dòng)掃描到@TestComponent。
如果你使用@SpringBootApplication啟動(dòng)測(cè)試或者生產(chǎn)代碼,@TestComponent會(huì)自動(dòng)被排除掉,如果不是則需要像@SpringBootApplication一樣添加TypeExcludeFilter

//...
@ComponentScan(excludeFilters = {
  @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  // ...})
public @interface SpringBootApplication
例子1:作為內(nèi)部類

@TestConfiguration和@Configuration不同,它不會(huì)阻止@SpringBootTest去查找機(jī)制(在Chapter 1: 基本用法 - 使用Spring Boot Testing工具 - 例子4提到過(guò)),正如@TestConfiguration的javadoc所說(shuō),它只是對(duì)既有配置的一個(gè)補(bǔ)充。

所以我們?cè)跍y(cè)試代碼上添加@SpringBootConfiguration,用@SpringBootTest(classes=...)或者在同package里添加@SpringBootConfiguration類都是可以的。

而且@TestConfiguration作為內(nèi)部類的時(shí)候它是會(huì)被@SpringBootTest掃描掉的,這點(diǎn)和@Configuration一樣。

測(cè)試代碼TestConfigurationTest:

@SpringBootTest
@SpringBootConfiguration
public class TestConfigurationTest extends AbstractTestNGSpringContextTests {

  @Autowired
  private Foo foo;

  @Test
  public void testPlusCount() throws Exception {
    assertEquals(foo.getName(), "from test config");
  }

  @TestConfiguration
  public class TestConfig {

    @Bean
    public Foo foo() {
      return new Foo("from test config");
    }

  }
}
例子2:對(duì)@Configuration的補(bǔ)充和覆蓋

@TestConfiguration能夠:

補(bǔ)充額外的Bean

覆蓋已存在的Bean

要特別注意第二點(diǎn),@TestConfiguration能夠直接覆蓋已存在的Bean,這一點(diǎn)正常的@Configuration是做不到的。

我們先提供了一個(gè)正常的@Configuration(Config):

@Configuration
public class Config {

  @Bean
  public Foo foo() {
    return new Foo("from config");
  }
}

又提供了一個(gè)@TestConfiguration,在里面覆蓋了foo Bean,并且提供了foo2 Bean(TestConfig):

@TestConfiguration
public class TestConfig {

  // 這里不需要@Primary之類的機(jī)制,直接就能夠覆蓋
  @Bean
  public Foo foo() {
    return new Foo("from test config");
  }

  @Bean
  public Foo foo2() {
    return new Foo("from test config2");
  }
}

測(cè)試代碼TestConfigurationTest:

@SpringBootTest(classes = { Config.class, TestConfig.class })
public class TestConfigurationTest extends AbstractTestNGSpringContextTests {

  @Qualifier("foo")
  @Autowired
  private Foo foo;

  @Qualifier("foo2")
  @Autowired
  private Foo foo2;

  @Test
  public void testPlusCount() throws Exception {
    assertEquals(foo.getName(), "from test config");
    assertEquals(foo2.getName(), "from test config2");

  }

}

再查看輸出的日志,就會(huì)發(fā)現(xiàn)Auto Configuration已經(jīng)關(guān)閉。

例子3:避免@TestConfiguration被掃描到

在上面的這個(gè)例子里的TestConfig是會(huì)被@ComponentScan掃描到的,如果要避免被掃描到,在本文開(kāi)頭已經(jīng)提到過(guò)了。

先來(lái)看一下沒(méi)有做任何過(guò)濾的情形,我們先提供了一個(gè)@SpringBootConfiguration(IncludeConfig):

@SpringBootConfiguration
@ComponentScan
public interface IncludeConfig {
}

然后有個(gè)測(cè)試代碼引用了它(TestConfigIncludedTest):

@SpringBootTest(classes = IncludeConfig.class)
public class TestConfigIncludedTest extends AbstractTestNGSpringContextTests {

  @Autowired(required = false)
  private TestConfig testConfig;

  @Test
  public void testPlusCount() throws Exception {
    assertNotNull(testConfig);

  }

}

從這段代碼可以看到TestConfig被加載了。

現(xiàn)在我們使用TypeExcludeFilter來(lái)過(guò)濾@TestConfiguration(ExcludeConfig1):

@SpringBootConfiguration
@ComponentScan(excludeFilters = {
    @ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class)
})
public interface ExcludeConfig1 {
}

再來(lái)看看結(jié)果(TestConfigExclude_1_Test):

@SpringBootTest(classes = ExcludeConfig1.class)
public class TestConfigExclude_1_Test extends AbstractTestNGSpringContextTests {

  @Autowired(required = false)
  private TestConfig testConfig;

  @Test
  public void test() throws Exception {
    assertNull(testConfig);

  }

}

還可以用@SpringBootApplication來(lái)排除TestConfig(ExcludeConfig2):

@SpringBootApplication
public interface ExcludeConfig2 {
}

看看結(jié)果(TestConfigExclude_2_Test):

@SpringBootTest(classes = ExcludeConfig2.class)
public class TestConfigExclude_2_Test extends AbstractTestNGSpringContextTests {

  @Autowired(required = false)
  private TestConfig testConfig;

  @Test
  public void testPlusCount() throws Exception {
    assertNull(testConfig);

  }

}
參考文檔

Spring Framework Testing

Spring Boot Testing

Detecting test configuration

Excluding test configuration

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70309.html

相關(guān)文章

  • Spring、Spring BootTestNG測(cè)試指南 - 測(cè)試Spring MVC

    摘要:地址提供了,能夠很方便的來(lái)測(cè)試。同時(shí)也提供了更進(jìn)一步簡(jiǎn)化了測(cè)試需要的配置工作。本章節(jié)將分別舉例說(shuō)明在不使用和使用下如何對(duì)進(jìn)行測(cè)試。例子測(cè)試的關(guān)鍵是使用對(duì)象,利用它我們能夠在不需啟動(dòng)容器的情況下測(cè)試的行為。 Github地址 Spring Testing Framework提供了Spring MVC Test Framework,能夠很方便的來(lái)測(cè)試Controller。同時(shí)Spring...

    andong777 評(píng)論0 收藏0
  • Spring、Spring BootTestNG測(cè)試指南 - @OverrideAutoConfi

    摘要:因?yàn)橹挥羞@樣才能夠在測(cè)試環(huán)境下發(fā)現(xiàn)生產(chǎn)環(huán)境的問(wèn)題,也避免出現(xiàn)一些因?yàn)榕渲貌煌瑢?dǎo)致的奇怪問(wèn)題。而方法則能夠不改變?cè)信渲貌惶峁┬碌呐渲玫那闆r下,就能夠關(guān)閉。 Github地址 在Chapter 1: 基本用法 - 使用Spring Boot Testing工具里提到: 除了單元測(cè)試(不需要初始化ApplicationContext的測(cè)試)外,盡量將測(cè)試配置和生產(chǎn)配置保持一致。比如如果生產(chǎn)...

    elisa.yang 評(píng)論0 收藏0
  • Spring、Spring BootTestNG測(cè)試指南 - @JsonTest

    摘要:地址是提供的方便測(cè)試序列化反序列化的測(cè)試工具,在的文檔中有一些介紹。例子簡(jiǎn)單例子源代碼見(jiàn)使用通包下的文件測(cè)試結(jié)果是否正確或者使用基于的校驗(yàn)例子測(cè)試可以用來(lái)測(cè)試。這個(gè)例子里使用了自定義的測(cè)試代碼例子使用事實(shí)上也可以配合一起使用。 Github地址 @JsonTest是Spring Boot提供的方便測(cè)試JSON序列化反序列化的測(cè)試工具,在Spring Boot的文檔中有一些介紹。 需要注...

    Hegel_Gu 評(píng)論0 收藏0
  • SpringSpring BootTestNG測(cè)試指南 - 使用Spring Testing工具

    摘要:源代碼見(jiàn)需要注意的是,如果是專供某個(gè)測(cè)試類使用的話,把它放到外部并不是一個(gè)好主意,因?yàn)樗锌赡軙?huì)被掃描到,從而產(chǎn)生一些奇怪的問(wèn)題。 Github地址 既然我們現(xiàn)在開(kāi)發(fā)的是一個(gè)Spring項(xiàng)目,那么肯定會(huì)用到Spring Framework的各種特性,這些特性實(shí)在是太好用了,它能夠大大提高我們的開(kāi)發(fā)效率。那么自然而然,你會(huì)想在測(cè)試代碼里也能夠利用Spring Framework提供的特...

    Maxiye 評(píng)論0 收藏0
  • Spring、Spring BootTestNG測(cè)試指南 - 共享測(cè)試配置

    摘要:地址在使用工具中提到在測(cè)試代碼之間盡量做到配置共用。本章將列舉幾種共享測(cè)試配置的方法我們可以將測(cè)試配置放在一個(gè)里,然后在測(cè)試或中引用它。也可以利用的及自定義機(jī)制,提供自己的用在測(cè)試配置上。 Github地址 在使用Spring Boot Testing工具中提到: 在測(cè)試代碼之間盡量做到配置共用。...能夠有效利用Spring TestContext Framework的緩存機(jī)制,Ap...

    CHENGKANG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<