Spring Boot 之 @SpringBootTest

了解Spring boot提供的@SpringBootTest注解,以在单元测试或集成测试期间在应用程序测试中启用特定于启动的功能。

1. @SpringBootTest

我们可以@SpringBootTest在运行基于Spring Boot的测试的测试类上指定注解。它的类声明如下:

@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Inherited
@BootstrapWith(value=SpringBootTestContextBootstrapper.class)
@ExtendWith(value=org.springframework.test.context.junit.jupiter.SpringExtension.class)
public @interface SpringBootTest 
{
	//
}

除了spring-test中的@ContextConfiguration(classes=…​)注解所提供的常规Spring TestContext之外,它还提供以下功能。

  • @SpringBootConfiguration当不使用嵌套的@Configuration类,并且未指定任何显式类时,将自动搜索。
  • 允许使用properties属性定义自定义环境属性。
  • 提供对不同的webEnvironment模式的支持,包括启动在定义的或随机端口上侦听的完全运行的Web服务器的功能。
  • 注册一个TestRestTemplate和/或WebTestClientbean,以在使用完全运行的Web服务器的Web测试中使用。

2.使用@SpringBootTest进行集成测试

后台@ SpringBootTest试图模仿由Spring Boot框架添加的用于创建上下文的过程,例如,它根据包结构决定要扫描的内容,从预定义的位置加载外部配置,可选地运行自动配置Starter,等等。

正如我们看到的那样,该注解已启动并在测试开始之前配置了几乎整个应用程序,我们应该@SpringBootTest用来编写一个使用应用程序进程和依赖项的集成测试。

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
public class SpringBootDemoApplicationTests 
{   
    @LocalServerPort
    int randomServerPort;

    //---- tests -----
}

3.使用@SpringBootTest进行单元测试

@SpringBootTest 注解会加载整个应用程序,但是最好将应用程序上下文仅限制为参与测试场景的一组Spring组件。

3.1。“类别”属性

classes属性指定用于加载ApplicationContext的带注解的类。

@SpringBootTest(classes = {EmployeeRepository.class, EmployeeService.class})
public class SpringBootDemoApplicationTests 
{   
	@Autowired
    private EmployeeService employeeService;
    //---- tests -----
}

3.2。*…测试注解

如果我们正在编写单元测试,那么现在最好使用@SpringBootTest注解。而是使用专用的spring boot测试注解来测试应用程序的特定部分。

这些注解将禁用完全自动配置,而是仅应用与代码库的特定层相关的配置。

下面列出了其中一些注解:

    • @WebFluxTest –可以与@RunWith(SpringRunner.class)结合使用,以进行典型的Spring WebFlux测试,该测试仅针对Spring WebFlux组件。它还将自动配置a WebTestClient
    • @JdbcTest –在测试仅针对基于jdbc的组件时可以使用。注解配置了一个内存嵌入式数据库和JdbcTemplate。默认情况下,测试是事务性的,并在每次测试结束时回滚。
    • @DataMongoTest –当测试仅关注MongoDB组件时可以使用。默认情况下,如果驱动程序可通过依赖项获得,则使用@DataMongoTest注解的测试将使用嵌入式内存MongoDB进程。它还配置MongoTemplate,扫描@Document类,并配置Spring Data MongoDB存储库。
    • @DataRedisTest –可用于测试Redis应用程序。它扫描@RedisHash类并配置Spring Data Redis存储库。
    • @DataLdapTest –可用于测试LDAP应用程序。它配置了一个内存嵌入式LDAP(如果可用),配置了LdapTemplate,扫描@Entry类,并配置了Spring Data LDAP存储库。

@RestClientTest –可用于测试REST客户端。它自动配置依赖关系,例如Jackson,GSON和Jsonb支持,配置RestTemplateBuilder,并默认添加对MockRestServiceServer的支持。

  • @JooqTest –在测试仅针对基于jOOQ的组件时使用。

4。结论

如上所述,使用@SpringBootTest注解在Spring Boot应用程序中编写集成测试–因为默认情况下,它会扫描并加载整个应用程序上下文以及所有与Spring Boot相关的自动配置。

如果我们打算编写单元测试,并且想要测试应用程序的几个特定部分,那么我们将使用专用的“ *…Test”注解,如本教程后面所述。

请在评论中向我发送有关如何在Spring Boot进行集成测试的问题。

学习愉快!

参考:@SpringBootTest Spring Docs

saigon has written 1440 articles

One thought on “Spring Boot 之 @SpringBootTest

Leave a Reply