SpringBoot + Junit5 + MockMvc 写单元测试
1.1 junit5 版本5.6.0 pom文件如下:
<properties>
<junit.jupiter.version>5.6.0</junit.jupiter.version>
</properties> <dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
1.2 test 测试类里面 首先先构建mockMvc的环境
@SpringBootTest
@ExtendWith(SpringExtension.class) //导入Spring测试框架
@DisplayName("人员ctr测试")
public class PersonControllerTest { @Autowired
private PersonController personController ; private MockMvc mockMvc; @BeforeEach
public void setUp() {
MockitoAnnotations.initMocks(this);//这句话执行以后,service自动注入到controller中。
// (1)构建mvc环境
mockMvc = MockMvcBuilders.standaloneSetup((personController)).build();
}
}
1.3 开始编写测试方法
1.2.1 Junit5最大的变化就是可以传参 ,简单介绍一下用法
@ValueSource(strings = {"111","222"}) //多个参数执行多次(即id为111执行一次后还会执行id为222) ,参数为字符串类型 public void test(String id){}
@MethodSource("getPerson") //参数为方法,方法里面你可以写你想要的数据格式 ,比如getPerson返回的JSONObject格式 public void test(JSONObject jsonobject){}
@ParameterizedTest //需要传参数时需要使用, 跟上面的注解是配套用的
1.2.2 MockMvc的使用:模拟对象去调用,真正实现单元测试
1. mockMvc.perform(MockMvcRequestBuilders.get("/v1/user/get_info") //请求构建mvc环境时的controller层里面的地址 , 可以get、post、put请求
2. .contentType(MediaType.APPLICATION_FORM_URLENCODED) //设置内容格式 ,当为post请求时要使用 .accept()设置接收格式,和内容的格式一样
3. post传参使用 .content(JSONObject.toJSONString(personIds))//设置内容
@Test
@DisplayName("根据id_获取人员信息")
@Order(1) //顺序
// @MethodSource("getPerson") //参数为方法
@ValueSource(strings = {"111","222"}) //多个参数执行多次
@ParameterizedTest //需要传参数时使用
public void getPersonById(String id) throws Exception { MockHttpServletResponse response = mockMvc.perform(MockMvcRequestBuilders.get("/v1/person/get_info")
.contentType(MediaType.APPLICATION_FORM_URLENCODED) //设置内容格式
.param("personid",id)//设置内容
)
.andDo(MockMvcResultHandlers.print())//返回打印结果
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn().getResponse();
response.setCharacterEncoding("UTF-8"); //解决中文乱码问题 Result<PersonDTO> result = JSONObject.parseObject(response.getContentAsString(), Result.class);//反序列化成对象
Assertions.assertTrue(result.getDataStore() != null); //断言结果校验
}
1.4 测试成功

SpringBoot + Junit5 + MockMvc 写单元测试的更多相关文章
- 【快学springboot】在springboot中写单元测试[Happyjava]
前言 很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码.写单元测试,也是保证代码质量的一种方式. junit单元测试 相信绝大多数的J ...
- 【快学springboot】在springboot中写单元测试
前言 很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码.写单元测试,也是保证代码质量的一种方式. junit单元测试 相信绝大多数的J ...
- java~springboot~h2数据库在单元测试中的使用
单元测试有几点要说的 事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下: 单 ...
- IDEA中SpringBoot项目快速创建单元测试
如何在IDEA中对于SpringBoot项目快速创建单元测试 创建测试用例 右键需要进行测试的方法,选择GO TO然后选择Test 点击Create New Test 勾选需要创建单元测试的方法 然后 ...
- SpringBoot学习笔记:单元测试
SpringBoot学习笔记:单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部 ...
- 基于Springboot+Junit+Mockito做单元测试
前言 前面的两篇文章讨论过< 为什么要写单元测试,何时写,写多细 >和<单元测试规范>,这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取 ...
- 单元测试er——为什么真的真的要写单元测试
优点 为什么很多技术或者知识要说优点?因为有些道理看着很简单,大家表面上都觉得对,但是做的时候又不去做或者做不到.其中有一个很重要原因是骨子里或者潜意识并没有真实觉得这是对的,一旦想去做的时候同时会冒 ...
- 为什么从前那些.NET开发者都不写单元测试呢?
楔子 四年前我虽然也写了很多年代码,由于公司虽然规模不小,却并非一家规范化的软件公司,因此在项目中严格意义上来说并没有架构设计.也不写单元测试,后来有幸加入了一家公司,这家公司虽然也是一家小公司,但是 ...
- VSTS写单元测试
用VSTS写单元测试 许多应用程序都会用到“用户”类型,今天我要用的是ConsoleApplicatio ...
- 如何为 Vue 项目写单元测试
https://www.w3ctech.com/topic/2052 如何为 Vue 项目写单元测试 前端工程 明非 2017-07-18 4685 访问 1 分享 微信分享 译者:明非 链接:htt ...
随机推荐
- Redis 相关
高并发多机的时候,虽然有失效时间,但还是会有短时间内缓存和数据库数据不一致(读操作不需要特殊操作),更新操作的时候先删除缓存,再更新数据库先更新数据库,再删除缓存原子性破坏,增加队列重试 先删除缓存, ...
- 【JDBC】总结
JDBC核心技术 第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数 ...
- 【Linux】5.2 Shell变量
Shell变量 1. shell变量简介 Linux Shell的变量分为,系统变量和用户自定义变量 系统变量: $HOME. $PWD. $SHELL. $USER等等 显示当前shell中所有变量 ...
- nodejs队列
nodejs队列 创建具有指定并发性的队列对象.添加到队列的任务以并行方式处理(直到并发性限制).如果所有的worker都在进行中,任务就会排队,直到有一个worker可用.worker完成任务后,将 ...
- public boolean add(E e)的源码分析
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...
- java基础之函数式接口
一.函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口 二.自定义函数式接口 格式: @FunctionalInterface //该注解可省, ...
- jmeter实现幂等测试的一种方法(案例)
最近在研究怎样对电商系统的业务进行幂等测试,利用jmeter对单独业务开展幂等测试可能简便.直接有效吧 场景描述:买家每一笔订单选中商品后,系统会生成一个"ShopCartIds" ...
- 康谋分享 | 从CAN到CAN FD:ADTF在汽车网络中的应用
随着汽车电子技术的发展,车辆上配备了越来越多的电子装置,这些设备多采用点对点的方式通信,这也导致了车内存在庞大的线束.造成汽车制造和安装的困难并进一步降低汽车的配置空间,汽车总线逐步开始向网络化方向发 ...
- 打造企业级AI文案助手:GPT-J+Flask全栈开发实战
一.智能文案革命的序幕:为什么需要AI文案助手? 在数字化营销时代,内容生产效率成为企业核心竞争力.据统计,营销人员平均每天需要撰写3.2篇文案,而传统人工创作存在三大痛点: 效率瓶颈:创意构思到成文 ...
- K8s新手系列之Service资源
概述 官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/ 在kubernetes中,pod是应用程序 ...