优雅地在springboot进行测试
简述
在springboot项目中使用单元测试十分简单,引入核心依赖 spring-boot-starter-test 即可
spring-boot-starter-test的子依赖
JUnit:java测试事实上的标准,默认依赖版本是4.12(JUnit5和JUnit4差别比较大,集成方式有不同)
Spring Test & Spring Boot Test:Spring的测试支持
AssertJ:提供了流式的断言方式
Hamcrest:提供了丰富的matcher
Mockito:mock框架,可以按类型创建mock对象,可以根据方法参数指定特定的响应,也支持对于mock调用过程的断言
JSONassert:为JSON提供了断言功能
JsonPath:为JSON提供了XPATH功能
@Runwith注解
在spring项目中,会使用@Runwith注解进行测试,@Runwith就是一个运行器
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环 境,以便在测试开始的时候自动创建Spring的应用上下文
@RunWith(SpringRunner.class),它继承了@RunWith(SpringJUnit4ClassRunner.class) ,用法相同,名字简短而已
@SpringBootTest
SpringBoot用 @SpringBootTest 注解替代了 spring-test 中的 @ContextConfiguration 注解,该注解可以创建 ApplicationContext,而且还添加了一些其他注解来测试特定的应用
使用 @SpringBootTest 的 WebEnvironment 属性来修改测试的运行方式
MOCK | 加载 Web 应用程序上下文并提供模拟的 Web 环境。该注解不会启动嵌入的服务器,可以结合@AutoConfigureMockMvc 和 @AutoConfigureWebTest-Client 注解使用 |
RANDOM_PORT | 加载 WebServerApplicationContext 并提供真实的 Web环境,嵌入的服务器启动后可以监听随机端口 |
DEFINED_PORT | 加载 WebServerApplicationContext 并提供真实的 Web 环境,嵌入的服务器启动后可以监听特定的端口。特定的端口可以从 application.properties 获取,也可以设置为默认的 8080 端口 |
NONE | 使用 SpringApplication 加载 ApplicationContext,但不提供任何 Web 环境 |
classes属性可以用来指定特定需要加载的类
@DataJpaTest
对于JPA,Repository进行测试的时候可以使用@DataJpaTest 注解,有了这个注解,Spring在启动的时候就只会加载@Repository 相关的class,这样能提高测试的效率
@WebMvcTest
测试WEB层可以使用@WebMvcTest 注解,使用此注解可以测试controller部分并且不用把整个服务都跑起来
同时该注解提供了MockMvc的支持,可以直接使用MockMvc
References
https://www.cnblogs.com/myitnews/p/12330297.html
https://blog.csdn.net/weixin_43899069/article/details/118107179
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南