测试案例中@SpringBootTest与@RunWith**的含义
背景:平常都是写功能,写业务代码忽略了对测试案例的理解,借此机会梳理记录一下测试案例中常用到的的几个注解。一:@SpringBootTest作用是加载ApplicationContext,启动spring容器。使用@SpringBootTest时并没有像@ContextConfiguration一样显示指定locations或classes属性,原因在于@SpringBootTest注解会自动检索
背景:平常都是写功能,写业务代码忽略了对测试案例的理解,借此机会梳理记录一下测试案例中常用到的的几个注解。
一:@SpringBootTest
作用是加载ApplicationContext,启动spring容器。使用@SpringBootTest时并没有像@ContextConfiguration一样显示指定locations或classes属性,原因在于@SpringBootTest注解会自动检索程序的配置文件,检索顺序是从当前包开始,逐级向上查找@SpringBootApplication@SpringBootConfiguration注解的类。
常用的配置项如下:
- value 指定配置属性
- properties 指定配置属性,和value意义相同
- classes 指定配置类,等同于@ContextConfiguration中的class,若没有显示指定,将查找嵌套的@Configuration类,然后返回到SpringBootConfiguration搜索配置
- webEnvironment 指定web环境,可选值有:MOCK、RANDOM_PORT、DEFINED_PORT、NONE
webEnvironment详细说明:
MOCK 此值为默认值,该类型提供一个mock环境,此时内嵌的服务(servlet容器)并没有真正启动,也不会监听web端口。
RANDOM_PORT 启动一个真实的web服务,监听一个随机端口。 DEFINED_PORT
启动一个真实的web服务,监听一个定义好的端口(从配置中读取)。 NONE
启动一个非web的ApplicationContext,既不提供mock环境,也不提供真是的web服务
。
二:@RunWith
junit中的注解,当一个类用@RunWith注释或继承一个用@RunWith注释的类时,JUnit将调用它所引用的类来运行该类中的测试而不是开发者去在junit内部去构建它。
举例说明:
注意点:发现idea中springboot项目不加@RunWith仍然可以运行,所以比较疑问到底加不加,从网上获取到比较比较准确的说法如下:
标准测试类里是要有@RunWith的,作用是告诉java你这个类通过用什么运行环境运行,例如启动和创建spring的应用上下文。否则你需要为此在启动时写一堆的环境配置代码。你在IDEA里去掉@RunWith仍然能跑是因为在IDEA里识别为一个JUNIT的运行环境,相当于就是一个自识别的RUNWITH环境配置。但在其他IDE里并没有。
所以,为了你的代码能在其他IDE里边正常跑,建议还是加@RunWith
更多推荐
所有评论(0)