为 Spring Boot 项目编写测试

本文详细介绍了在 Spring Boot 项目中如何编写测试,包括理解 Spring Boot 测试体系、只启动 Spring IOC 容器的测试、Spring Boot 全量测试自动配置、局部测试自动配置、分层测试和测试策略。通过示例展示了MockMVC测试、Service + 内嵌基础设施测试,以及介绍了一些常用的测试工具,如TestPropertyValues、OutputCapture和JdbcTestUtils。文章强调了选择低成本测试方法的重要性,以及如何根据需求灵活使用不同类型的测试。

Java 开发中目前最流行的技术栈就是 Spring Boot 了,大部分讲解单元测试或者 TDD 的书籍围绕 Spring Boot 的讲解比较少,但是 Spring Boot 测试相关的内容比较多,也比较实用。这部分就是围绕 Spring、Spring Boot 来编写单元测试。

这部分的代码位于: https://github.com/linksgo2011/java-unit-testing-book/tree/master/spring

我当前使用的 Spring Boot 版本是 2.1.7.RELEASE,在 2.1.x 系列版本中,Spring Boot 还是使用的 Junit 4,在后期的版本的中,会升级到 5。JUnit 5 带来了全新的架构,会有一些不同,为了简单暂时使用 JUnit4。

理解 Spring Boot 测试体系

在 Spring Boot 编写单元测试的时候,有时候会觉得概念比较混乱难以理解,在网上找一些代码贴上来不知道就怎么工作了,出现问题也不知道怎么修。

在 Spring Boot 项目中做测试,我们会用到

Spring Boot 项目的单元测试通常使用 JUnit 和 Spring Test 模块。下面是一个简单的 Spring Boot 单元测试示例代码: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.jdbc.Sql; import org.springframework.test.context.jdbc.SqlConfig; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @SpringJUnitConfig @SpringBootTest @AutoConfigureMockMvc @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @DataJpaTest public class UserControllerTest { @Autowired private MockMvc mockMvc; @Test @Sql(scripts = "/data.sql", config = @SqlConfig(encoding = "UTF-8")) public void getUserByIdTest() throws Exception { MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/users/1")) .andExpect(status().isOk()) .andReturn(); String content = result.getResponse().getContentAsString(); assertEquals("{\"id\":1,\"name\":\"John\",\"age\":30}", content); } } ``` 上面的示例代码演示了如何编写一个测试 `UserController` 的单元测试。在 Spring Boot 中,我们通常使用 `@SpringBootTest` 注解来启动整个应用程序上下文,使用 `@AutoConfigureMockMvc` 注解来注入 MockMvc 对象,以便测试控制器的 RESTful API。我们还可以使用 `@DataJpaTest` 注解和 `@AutoConfigureTestDatabase` 注解来配置测试数据库,以便测试持久化操作。在这个例子中,我们还使用了 `@Sql` 注解来执行 SQL 脚本,以便在测试前准备测试数据。 总的来说,Spring Boot 的单元测试相比传统的单元测试更加复杂,但是也更加强大和灵活。我们可以根据具体的测试需求来选择合适的测试工具和策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值