Spring Boot 之 @TestConfiguration

借助@TestConfiguration注解,学习在Spring Boot应用程序中创建和导入测试配置

1. @TestConfiguration注解

@TestConfiguration是一种特殊的形式@Configuration,可用于定义测试的其他bean或自定义项。

在Spring Boot中,@TestConfiguration将不会通过组件扫描来拾取在顶级类中配置有注解的任何bean 。我们必须使用包含测试用例的类显式注册@TestConfiguration类。

有两种方法可以包含此测试的附加测试配置:

1.1。@导入注解

它指示要导入到应用程序上下文或Spring测试上下文中的一个或多个配置类。

@Bean导入的@TestConfiguration类中声明的定义应通过@Autowired注入来访问。可以对bean本身进行 Autowire ,也可以对声明bean的配置类实例进行 Autowire 。

应该在类级别或作为元注解声明。

如果需要导入XML或其他非配置Bean定义资源,请改用@ImportResource注解。

@TestConfiguration
public class MyTestConfiguration {

    //tests specific beans
    @Bean
    DataSource createDataSource(){
    	//
    }
}
@Import(MyTestConfiguration.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class SpringBootDemoApplicationTests 
{   
    @LocalServerPort
    int randomServerPort;

    @Autowired
    DataSource datasource;

    //tests
}

1.2。静态嵌套类

我们可以在测试类内部的嵌套类中定义测试配置。嵌套类可以用@Configuration@TestConfiguration注解。

如果用@TestConfiguration或@Configuration 注解的类是测试类中的静态嵌套类,则它将被自动注册

  • 在嵌套@Configuration类的情况下,将使用给定的配置“代替”应用程序的主要配置。
  • “除”应用程序的主要配置外,还使用了嵌套的@TestConfiguration类。
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class SpringBootDemoApplicationTests 
{   
    @LocalServerPort
    int randomServerPort;

    @Autowired
    DataSource datasource;

    //tests

    @TestConfiguration
	static class MyTestConfiguration {

	    //tests specific beans
	    @Bean
	    DataSource createDataSource(){
	    	//
	    }
	}
}

2.结论

@TestConfiguration注解是在执行单元和集成测试时提供特定于测试的配置和bean的非常有用的方法。

最好的事情是这些配置不会自动成为应用程序主配置的一部分。仅可使用wither @Import注解或静态嵌套类按需使用它们。

注意嵌套类中@Configutation和@TestConfiguration注解之间区别,因为第一个版本不包含主要配置,而更高版本则用于创建除主要配置之外的其他测试配置。

学习愉快!

saigon has written 1440 articles

Leave a Reply