springboot测试
一、单元测试
在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了。
1、在pom包中添加spring-boot-starter-test包引用
1 2 3 4 5 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> |
2、开发测试类
以最简单的helloworld为例,在测试类的类头部需要添加:@RunWith(SpringRunner.class)
和@SpringBootTest
注解,在测试方法的顶端添加@Test
即可,最后在方法上点击右键run就可以运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @RunWith (SpringRunner. class ) @SpringBootTest public class MailServiceTest { @Autowired private MailService mailService; @Test public void testSimpleMail() throws Exception { mailService.sendSimpleMail( "1249736987@qq.com" , "test simple mail" , " zmc" ); } @Test public void hello() { System.out.println( "hello world,zmc" ); } } |
实际使用中,可以按照项目的正常使用去注入dao层代码或者是service层代码进行测试验证,spring-boot-starter-test提供很多基础用法,更难得的是增加了对Controller层测试的支持。
1 2 3 4 5 6 | //简单验证结果集是否正确 Assert.assertEquals( 3 , userMapper.getAll().size()); //验证结果集,提示 Assert.assertTrue( "错误,正确的返回值为200" , status == 200 ); Assert.assertFalse( "错误,正确的返回值为200" , status != 200 ); |
引入了MockMvc
支持了对Controller层的测试,简单示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class HelloControlerTests { private MockMvc mvc; //初始化执行 @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup( new HelloController()).build(); } //验证controller是否正常响应并打印返回结果 @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get( "/hello" ).accept(MediaType.APPLICATION_JSON)) .andExpect(MockMvcResultMatchers.status().isOk()) .andDo(MockMvcResultHandlers.print()) .andReturn(); } //验证controller是否正常响应并判断返回结果是否正确 @Test public void testHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get( "/hello" ).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo( "Hello World" ))); } } |
单元测试是验证你代码第一道屏障,要养成每写一部分代码就进行单元测试的习惯,不要等到全部集成后再进行测试,集成后因为更关注整体运行效果,很容易遗漏掉代码底层的bug.
二、集成测试
整体开发完成之后进入集成测试,spring boot项目的启动入口在 Application类中,直接运行run方法就可以启动项目,但是在调试的过程中我们肯定需要不断的去调试代码,如果每修改一次代码就需要手动重启一次服务就很麻烦,spring boot非常贴心的给出了热部署的支持,很方便在web项目中调试使用。
pom需要添加以下的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional> true </optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork> true </fork> </configuration> </plugin> </plugins> </build> |
添加以上配置后,项目就支持了热部署,非常方便集成测试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-09-27 (转)Elasticsearch聚合初探——metric篇
2017-09-27 (转)Elasticsearch查询规则------match和term