当前位置: 首页 > article >正文

滚雪球学MyBatis-Plus(13):测试与部署

前言

在上期内容中,我们深入探讨了 MyBatis Plus 的高级功能,包括自定义 SQL 注解、批量操作以及数据加密与解密。这些功能极大地提高了开发效率,并增强了数据操作的灵活性和安全性。

本期内容将重点介绍 MyBatis Plus 的测试与部署。我们将学习如何编写单元测试和集成测试,确保代码的正确性和可靠性。然后,我们将讨论项目的打包与部署流程,帮助你将开发的应用程序顺利发布到生产环境中。

一、测试概述

测试是软件开发过程中至关重要的一环。通过测试,我们可以验证代码的正确性,发现潜在的问题,并确保系统的稳定性。常见的测试类型包括单元测试、集成测试和功能测试。

二、编写单元测试

单元测试是针对软件中的最小可测试单元(通常是类或方法)进行验证的测试。单元测试的主要目的是确保每个单元的行为符合预期。

  1. 添加依赖

    • pom.xml 中添加 JUnit 和 Spring Boot Test 的依赖:
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
      </dependency>
      
  2. 编写单元测试类

    • src/test/java/com/example/mybatisplusdemo 目录下创建 UserServiceTest 类,编写测试方法:
      package com.example.mybatisplusdemo;
      
      import com.example.mybatisplusdemo.entity.User;
      import com.example.mybatisplusdemo.service.UserService;
      import org.junit.jupiter.api.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import java.util.List;
      
      @SpringBootTest
      public class UserServiceTest {
      
          @Autowired
          private UserService userService;
      
          @Test
          public void testSaveUser() {
              User user = new User();
              user.setName("Test User");
              user.setAge(30);
              user.setEmail("test@example.com");
              boolean result = userService.save(user);
              assert result;
          }
      
          @Test
          public void testFindUser() {
              List<User> users = userService.list();
              assert users.size() > 0;
          }
      
          @Test
          public void testUpdateUser() {
              User user = userService.getById(1L);
              user.setAge(35);
              boolean result = userService.updateById(user);
              assert result;
          }
      
          @Test
          public void testDeleteUser() {
              boolean result = userService.removeById(1L);
              assert result;
          }
      }
      
  3. 运行单元测试

    • 在 IDE 中运行 UserServiceTest 类,确保所有测试用例通过。
三、编写集成测试

集成测试是对多个组件或模块进行联合测试,主要目的是验证它们在一起工作时是否正确。

  1. 编写集成测试类

    • src/test/java/com/example/mybatisplusdemo 目录下创建 UserControllerTest 类,编写测试方法:
      package com.example.mybatisplusdemo;
      
      import com.example.mybatisplusdemo.entity.User;
      import com.fasterxml.jackson.databind.ObjectMapper;
      import org.junit.jupiter.api.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.boot.test.web.client.TestRestTemplate;
      import org.springframework.http.HttpEntity;
      import org.springframework.http.HttpMethod;
      import org.springframework.http.ResponseEntity;
      
      import java.util.List;
      
      @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
      public class UserControllerTest {
      
          @Autowired
          private TestRestTemplate restTemplate;
      
          @Autowired
          private ObjectMapper objectMapper;
      
          @Test
          public void testAddUser() throws Exception {
              User user = new User();
              user.setName("Integration Test User");
              user.setAge(28);
              user.setEmail("integration_test@example.com");
              HttpEntity<User> request = new HttpEntity<>(user);
              ResponseEntity<String> response = restTemplate.postForEntity("/user/add", request, String.class);
              assert response.getStatusCodeValue() == 200;
          }
      
          @Test
          public void testGetUsers() {
              ResponseEntity<List> response = restTemplate.getForEntity("/user/list", List.class);
              assert response.getStatusCodeValue() == 200;
              assert response.getBody().size() > 0;
          }
      
          @Test
          public void testUpdateUser() throws Exception {
              User user = new User();
              user.setName("Integration Test User");
              user.setAge(30);
              user.setEmail("integration_test_updated@example.com");
              HttpEntity<User> request = new HttpEntity<>(user);
              ResponseEntity<String> response = restTemplate.exchange("/user/update", HttpMethod.PUT, request, String.class);
              assert response.getStatusCodeValue() == 200;
          }
      
          @Test
          public void testDeleteUser() {
              ResponseEntity<String> response = restTemplate.exchange("/user/delete?name=Integration Test User", HttpMethod.DELETE, null, String.class);
              assert response.getStatusCodeValue() == 200;
          }
      }
      
  2. 运行集成测试

    • 在 IDE 中运行 UserControllerTest 类,确保所有测试用例通过。
四、项目打包

在完成所有开发和测试后,我们需要将项目打包,以便部署到生产环境中。

  1. 打包命令

    • 在项目根目录下运行 Maven 打包命令:
      mvn clean package
      
  2. 生成的 JAR 文件

    • 打包完成后,在 target 目录下生成一个可执行的 JAR 文件,例如 mybatis-plus-demo-0.0.1-SNAPSHOT.jar
五、项目部署
  1. 部署到服务器

    • 将生成的 JAR 文件上传到目标服务器。
  2. 运行 JAR 文件

    • 在服务器上运行以下命令启动应用:
      java -jar mybatis-plus-demo-0.0.1-SNAPSHOT.jar
      
  3. 访问应用

    • 打开浏览器,访问应用的 URL,验证应用是否正常运行。
六、总结

通过本篇文章,你已经学会了如何编写单元测试和集成测试,以确保代码的正确性和可靠性。同时,我们还介绍了项目的打包与部署流程,帮助你将开发的应用程序顺利发布到生产环境中。测试与部署是软件开发中不可或缺的一部分,通过这些步骤,你可以保证项目的高质量和稳定运行。

下期预告

在下一期内容中,我们将总结整个 MyBatis Plus 系列教程的内容,并推荐一些拓展阅读资料和学习方向。我们还会分享一些实际项目中的经验和技巧,帮助你更好地应用 MyBatis Plus 进行开发。敬请期待!

通过本系列教程的学习,你已经系统地掌握了 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升了你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!


http://www.kler.cn/a/301254.html

相关文章:

  • Spring Boot中集成Redis与MySQL
  • 【git】git取消提交的内容,恢复到暂存区
  • 支付域——新零售支付
  • 在 Windows 11 中使用 MuMu 模拟器 12 国际版配置代理
  • ATmaga8单片机Pt100温度计源程序+Proteus仿真设计
  • 几何合理的分片段感知的3D分子生成 FragGen - 评测
  • JAVAWeb---JavaScript
  • docker管理redis集群
  • Vue 2 中实现双击事件的几种方法
  • 【区块链通用服务平台及组件】江西省区块链应用服务开放平台 | FISCO BCOS应用案例
  • 【2024】前端学习笔记4-图像标记
  • 【机器人工具箱Robotics Toolbox开发笔记(十二)】 机器人运动轨迹规划
  • CPU调度算法之彩票调度(Lottery Scheduling)
  • 【项目案例】嵌入式Linux比较好的10+练手项目推荐,附项目文档/源码/视频
  • curl证书问题如何解决
  • 【Linux 从基础到进阶】自动化备份与恢复策略
  • JavaSE——封装、继承和多态
  • IPD变革之道内涵是什么?何以与人工智能新技术融合
  • 《机器学习》—— XGBoost(xgb.XGBClassifier) 分类器
  • 关于Spring Cloud 表达式注入漏洞——分析复现
  • 图像去噪的艺术:自适应中值滤波器的应用与实践
  • BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin
  • mycat双主高可用架构部署-mycat安装
  • 【诉讼流程-健身房-违约-私教课-多次沟通无效-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(1)】
  • vscode 如何格式化yaml
  • 如何使用QT完成记事本程序的UI界面布局