若依框架-单元测试实践指南-最新
1. 若依框架单元测试入门指南第一次接触若依框架的单元测试时我也是一头雾水。作为国内流行的快速开发框架若依确实能帮我们省去很多重复工作但单元测试这块却经常被开发者忽略。其实好的单元测试能帮我们提前发现80%以上的基础bug今天我就用最直白的语言带大家从零开始搭建若依的测试环境。先说说为什么要在若依中做单元测试。这个框架本身集成了SpringBoot、MyBatis等主流技术栈业务代码通常集中在ruoyi-admin模块。想象一下当你修改了一个用户服务类的方法如果没有单元测试就得手动重启服务、登录系统、点击页面来验证效率极低。而有了单元测试点下运行按钮就能自动验证所有核心逻辑。准备工作很简单只需要确保你的开发环境有JDK 1.8或以上版本Maven 3.6IntelliJ IDEA或Eclipse已经成功运行的若依项目以ruoyi-4.7.0为例提示建议在开发初期就建立测试习惯后期补充测试用例的工作量会成倍增加2. 测试环境搭建实战2.1 依赖配置详解打开ruoyi-admin模块的pom.xml文件在dependencies节点添加这三个关键依赖!-- 单元测试基础支持 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency !-- JUnit5测试框架 -- dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter/artifactId scopetest/scope /dependency !-- Spring测试上下文 -- dependency groupIdorg.springframework/groupId artifactIdspring-test/artifactId scopetest/scope /dependency这三个依赖各有分工spring-boot-starter-test是SpringBoot测试的全家桶包含Mockito、AssertJ等工具junit-jupiter是JUnit5的核心实现spring-test提供了Spring容器集成测试支持配置完成后记得右键项目 - Maven - Update Project让依赖生效。我遇到过不少同学卡在这一步主要是因为网络问题导致依赖下载失败。如果遇到这种情况可以尝试检查Maven配置的镜像源删除本地仓库的对应目录重新下载使用mvn clean install -U强制更新2.2 测试目录结构规范若依默认可能没有test目录我们需要手动创建。在ruoyi-admin/src下新建test目录与main目录同级。正确的结构应该是ruoyi-admin ├── src │ ├── main │ │ ├── java │ │ └── resources │ └── test │ ├── java │ └── resources这里有个细节要注意test/java下的包结构应该与main/java保持一致。比如你的服务类在com.ruoyi.system.service包下那么测试类就应该放在com.ruoyi.system.service包下。这样既能保持代码整洁又能让IDE快速定位对应测试。3. 编写第一个测试类3.1 测试类基础模板假设我们要测试系统内置的SysUserService先创建测试类package com.ruoyi.system.service; import com.ruoyi.RuoYiApplication; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; SpringBootTest(classes RuoYiApplication.class) public class SysUserServiceTest { Autowired private SysUserService userService; Test public void testSelectUserById() { // 测试代码将写在这里 } }几个关键点说明SpringBootTest注解会启动完整的Spring上下文classes参数指定主启动类Autowired可以直接注入要测试的服务测试方法需要用Test标注3.2 实际测试案例编写让我们写个具体的测试方法验证根据用户ID查询用户的功能Test public void testSelectUserById() { // 准备测试数据 Long userId 1L; // 调用待测试方法 SysUser user userService.selectUserById(userId); // 验证结果 assertNotNull(user, 用户对象不应为null); assertEquals(admin, user.getUserName(), 管理员用户名应为admin); assertTrue(user.isAdmin(), ID为1的用户应该是管理员); }这里用到了JUnit5的断言方法assertNotNull 检查对象非空assertEquals 验证预期值和实际值相等assertTrue 验证条件为真注意实际项目中建议使用AssertJ它的断言更强大比如assertThat(user) .isNotNull() .hasFieldOrPropertyWithValue(userName, admin) .matches(u - u.isAdmin(), 应该是管理员);4. 高级测试技巧4.1 模拟数据库操作直接操作真实数据库会有副作用我们可以用DataJpaTest配合H2内存数据库DataJpaTest AutoConfigureTestDatabase(replace AutoConfigureTestDatabase.Replace.NONE) Import(SysUserServiceImpl.class) public class SysUserServiceRepositoryTest { Autowired private TestEntityManager entityManager; Autowired private SysUserService userService; Test public void testSaveUser() { SysUser newUser new SysUser(); newUser.setUserName(test); newUser.setPassword(123456); SysUser saved userService.insertUser(newUser); assertThat(saved.getUserId()).isNotNull(); assertThat(entityManager.find(SysUser.class, saved.getUserId())) .isEqualTo(saved); } }4.2 控制器层测试对于Controller的测试可以用WebMvcTestWebMvcTest(SysUserController.class) public class SysUserControllerTest { Autowired private MockMvc mockMvc; MockBean private SysUserService userService; Test public void testGetUser() throws Exception { given(userService.selectUserById(1L)) .willReturn(new SysUser(1L, admin)); mockMvc.perform(get(/user/1)) .andExpect(status().isOk()) .andExpect(jsonPath($.userName).value(admin)); } }5. 测试执行与优化5.1 测试覆盖率提升建议安装JaCoCo插件来检查覆盖率plugin groupIdorg.jacoco/groupId artifactIdjacoco-maven-plugin/artifactId version0.8.7/version executions execution goals goalprepare-agent/goal /goals /execution execution idreport/id phasetest/phase goals goalreport/goal /goals /execution /executions /plugin运行mvn test后可以在target/site/jacoco目录查看覆盖率报告。建议核心业务代码达到80%以上的覆盖率。5.2 持续集成中的测试在Jenkins或GitHub Actions中可以这样配置测试任务# GitHub Actions示例 name: Java CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Set up JDK 11 uses: actions/setup-javav2 with: java-version: 11 distribution: adopt - name: Build with Maven run: mvn -B test遇到测试失败时建议先本地复现问题。我常用的排查步骤是查看失败堆栈信息检查测试数据准备是否完整确认数据库连接配置使用调试模式逐步执行
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428928.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!