欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

SpringBoot单元测试的@RunWith与@SpringBootTest注解

发布时间:2024/3/13 javascript 68 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SpringBoot单元测试的@RunWith与@SpringBootTest注解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

SpringBoot测试类注解示例:

import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest;@RunWith(SpringRunner.class) @SpringBootTest(classes = GeneratorApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UserTest { }

1. @RunWith(SpringRunner.class)

目的: 为了让测试在Spring容器环境下执行。

@RunWith是JUnit的一个注解, 用来告诉JUnit不要使用内置的方式进行单元测试, 而应该使用指定的类做单元测试 对于Spring单元测试总是要使用 SpringRunner.class。

@RunWith 就是一个运行器,Test测试类需要使用Spring注入的类,例如@Autowired注入的类,使用@RunWith(SpringRunner.class)注解,注入的类才能实例化到Spring容器中,自动注入方能生效,否则会返回NullPointerExecption。

2. @SpringBootTest

目的: 加载ApplicationContext,启动spring容器。

@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。

@SpringBootTest的classes 属性指向一个启动类或配置启动类

注:

  • @SpringBootTest会自动检索程序的配置文件,无需显式指定classes属性;
  • 检索顺序是从当前包开始,逐级向上查找被@SpringBootApplication或@SpringBootConfiguration注解的类。
  • SpringBootTest.WebEnvironment.RANDOM_PORT启动一个真实的web服务,会随机生成一个端口号。

    一 般情况下,使用@SpringBootTest后,Spring将加载所有被管理的bean,基本等同于启动了整个服务,此时便可以开始功能测试。
    由于web服务是最常见的服务,且我们对于web服务的测试有一些特殊的期望,所以@SpringBootTest注解中,给出了webEnvironment参数指定了web的environment,该参数的值一共有四个可选值:

    • MOCK:此值为默认值,该类型提供一个mock环境,可以和@AutoConfigureMockMvc或@AutoConfigureWebTestClient搭配使用,开启Mock相关的功能。注意此时内嵌的服务(servlet容器)并没有真正启动,也不会监听web服务端口。
    • RANDOM_PORT:启动一个真实的web服务,监听一个随机端口。
    • DEFINED_PORT:启动一个真实的web服务,监听一个定义好的端口(从application.properties读取)。
    • NONE:启动一个非web的ApplicationContext,既不提供mock环境,也不提供真实的web服务。

    注:如果当前服务的classpath中没有包含web相关的依赖,spring将启动一个非web的ApplicationContext,此时的webEnvironment就没有什么意义了。

    其他拓展:

  • @SpringBootTest 用来指定SpringBoot应用程序的入口类, 该注解默认会根据包名逐级往上找, 一直找到一个SpringBoot主程序class为止, 然后启动该类为单元测试准备Spring上下文环境. Spring单元测试并不在每个测试方法前都移动一个全新的Spring上下文, 因为这样做太耗费时间, 而是会缓存上下文环境. 如果某个测试方法需要重新准备Spring上下文, 需要在该方法上加 @DirtiesContext 注解。
  • 以Test结尾的注解,具有加载applicationContext的能力。
  • 引用文章:http://ypk1226.com/2018/11/20/spring-boot/spring-boot-test-2/

    总结

    以上是生活随笔为你收集整理的SpringBoot单元测试的@RunWith与@SpringBootTest注解的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。