javascript
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.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就没有什么意义了。
其他拓展:
引用文章:http://ypk1226.com/2018/11/20/spring-boot/spring-boot-test-2/
总结
以上是生活随笔为你收集整理的SpringBoot单元测试的@RunWith与@SpringBootTest注解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 与恐龙共舞 1. 内存报警
- 下一篇: 一文入门 Spring Boot