前言

老实我以前也没写过单元测试(小公司没要求),都是postman自测OK就提交了
这里第一次写,还废了点时间
做个笔记下次直接抄吧

jar包版本号

        <!-- 测试用 start --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><version>2.5.6</version></dependency><!-- 测试用 end -->

单元测试代码

package com.mea.pay.transaction;import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mea.pay.api.dto.transaction.PaymentRecordPayerRemarkUpdateDTO;
import com.mea.pay.transaction.controller.PaymentRecordController;
import com.mea.pay.transaction.dos.PaymentRecordDO;
import com.mea.pay.transaction.service.PaymentRecordService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;import java.math.BigDecimal;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;/*** 支付 单元测试** @author Heng.Wei* @date 2022-05-05**/
@ActiveProfiles("dev")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
public class PaymentRecordControllerTest {/** 单元测试 - 支付方用户ID */private static final Long UNIT_TEST_PAYMENT_USER_ID = 1L;/** 单元测试 - 查询用的请求ID */private static final String UNIT_TEST_PAYMENT_RECORD_REQUEST_ID = "UNIT_TEST_1";/** 单元测试 - 查询用的主键ID */private static Long UNIT_TEST_PAYMENT_RECORD_ID;@Autowiredprivate PaymentRecordService paymentRecordService;private MockMvc mockMvc;@BeforeEachvoid setUp() {mockMvc = standaloneSetup(new PaymentRecordController(paymentRecordService)).defaultRequest(get("/").accept(MediaType.APPLICATION_JSON)).alwaysExpect(status().isOk()).alwaysExpect(content().contentType("application/json")).build();// 初始化测试数据initTestData();}/** 初始化测试数据 */void initTestData() {PaymentRecordDO recordDO = paymentRecordService.getOne(new LambdaQueryWrapper<PaymentRecordDO>() {{eq(PaymentRecordDO::getRequestId, UNIT_TEST_PAYMENT_RECORD_REQUEST_ID);}});if (recordDO == null) {recordDO = new PaymentRecordDO();recordDO.setRequestId(UNIT_TEST_PAYMENT_RECORD_REQUEST_ID).setAmount(new BigDecimal(100)).setCurrency("USD").setPlatformId(1L).setTransChannel(1).setInitiator(UNIT_TEST_PAYMENT_USER_ID).setPayerPan("UNIT_TEST_PAN");paymentRecordService.save(recordDO);}UNIT_TEST_PAYMENT_RECORD_ID = recordDO.getId();}/*** <pre>* /payment/request/{requestId}* 根据请求唯一ID获取支付记录* </pre>**/@Testvoid getPaymentRecordByRequestId() throws Exception {mockMvc.perform(get("/payment/request/" + UNIT_TEST_PAYMENT_RECORD_REQUEST_ID).accept(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk());}/*** <pre>* /payment/{id}* 根据主键ID查询支付记录详情* </pre>**/@Testvoid getPaymentRecordById() throws Exception {mockMvc.perform(get("/payment/" + UNIT_TEST_PAYMENT_RECORD_ID).accept(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk());}/*** <pre>* 修改支付记录的用户备注信息* /payment* </pre>**/@Testvoid updatePaymenRecordPayerRemark() throws Exception {PaymentRecordPayerRemarkUpdateDTO updateDTO = new PaymentRecordPayerRemarkUpdateDTO();updateDTO.setId(UNIT_TEST_PAYMENT_RECORD_ID);updateDTO.setPayerRemark("unit test:" + DateTime.now());updateDTO.setPicurl("unit test");updateDTO.setTags("unit test");mockMvc.perform(put("/payment").accept(MediaType.ALL_VALUE).contentType(MediaType.APPLICATION_JSON).content(JSON.toJSONString(updateDTO))).andDo(print()).andExpect(status().isOk());}/*** <pre>* /list/{userId}* </pre>**/@Testvoid listPaymentRecords() throws Exception {mockMvc.perform(get("/payment/list/" + UNIT_TEST_PAYMENT_USER_ID).accept(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk());}
}

测试结果


理论上单元测试是要求可重复验证才对,这里是OK的

MockMvc 单元测试样例相关推荐

  1. 一个用户故事的样例(极限编程)

    用户故事是从用户的角度对系统功能的描述,通过与用户一起探讨而得出,事实上XP的实践应由用户亲手撰写用户故事,但对很多用户来说并不容易,所以很多的实践过程中是开发人员和用户一起撰写. 开发人员依照用户故 ...

  2. C语言单元测试之安装gtest教程及一个简单样例

    准备工作 安装包:gtest1.7.0版本(最新的1.8.0版本一直安装失败,1.7.0版本一次成功) 安装链接:百度网盘 https://pan.baidu.com/s/1mDy9sB3sBIMei ...

  3. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  4. 2021年大数据常用语言Scala(三十二):scala高级用法 样例类

    目录 样例类 定义样例类 样例类方法 样例对象 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),而且它会自动生成apply方法,允许我们快速地创建样例 ...

  5. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  8. 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...

  9. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

最新文章

  1. shiro源码分析(四)具体的Realm
  2. ssh_config sshd_config 详解
  3. struts.xml 文件添加DTD文件
  4. 成功解决Ignoring invalid distribution -yqt5
  5. 机器学习-MNIST数据集-神经网络
  6. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
  7. 若依微服务版前端怎样在接口返回500时去掉一直弹窗提示服务未找到
  8. CERTIFICATE OF APPRECIATION FOR DONATION FOR IBSS
  9. php可以集成萤石监控吗,萤石多功能IP摄像机 真的可以让家更安全吗?
  10. KDD 2021 | 一种使用真负样本的在线延迟反馈建模
  11. html5 控制鼠标移动,HTML5 Canvas随鼠标移动的引力粒子群
  12. CCNA实验(8) -- PPP HDLC
  13. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)
  14. elasticsearch scroll 一页最大数据量_elasticsearch 百亿级数据检索案例与原理
  15. 在矩池云上使用A6000/3090跑ikatago说明
  16. 如何查看Android项目的gradle版本和路径
  17. findbugs代码检查常见问题及处理
  18. 阿里巴巴矢量图标库在线链接使用图标
  19. 封装el-select(全球国家名字及国家区号),select 输入框回显
  20. 【读书笔记】《我的奋斗》罗永浩

热门文章

  1. 自旋锁(spinlock) 解释得经典,透彻
  2. python find的使用方法_Python中的rfind()方法使用详解
  3. 二叉搜索树/二叉排序树/二叉查找树
  4. 机器人运动力学基础(1)
  5. 如何用phtoshop cs6 切图
  6. 政务外网IPv6技术演进历程
  7. prometheus监控redis
  8. 计算机毕业设计springboot+vue基本微信小程序的家装公司管理系统小程序
  9. MSIL Hello World
  10. memcopy 导致的代码崩溃问题,memcpy的三大踩坑记