MockMvc编写单测
MockMvc
注意点
1、通过spring上下文获取mockmvc对象
@BeforeEach
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
2、json处理
通过MockMvc发送和接受请求都是json。
所以发送请求的时候,需要将javabean转json
.content(new ObjectMapper().writeValueAsString(person)).contentType(MediaType.APPLICATION_JSON))
在接受得到result后,也需用json串转javabean。
Person person = new ObjectMapper().readValue(result.getResponse().getContentAsString(), Person.class);
code
待测试的controller
package com.lexiaoyao.mocktest.controller;
import com.lexiaoyao.mocktest.model.Person;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("test")
@Slf4j
public class TestController {
//通过正则限时id只能为数字
@GetMapping("/person/{id:\\d+}")
public ResponseEntity getPerson(@PathVariable("id") Integer id) {
return ResponseEntity.ok(new Person(id, "tom", 22));
}
@PostMapping("/person")
public ResponseEntity postPerson(@RequestBody Person person) {
return ResponseEntity.ok(person);
}
}
测试类
@SpringBootTest
@Slf4j
class MocktestApplicationTests {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
//在junit5内用BeforeEach代替Before
@BeforeEach
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testGet() throws Exception {
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/test/person/1")
//设置以json方式传输
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
//将MvcResult中的response转为对象
Person person = new ObjectMapper().readValue(result.getResponse().getContentAsString(), Person.class);
Assert.assertNotNull(person);
Assert.assertEquals(person.getId(), Integer.valueOf(1));
}
@Test
public void testPost() throws Exception {
Person person = new Person(10, "name", 2);
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/test/person")
.content(new ObjectMapper().writeValueAsString(person)).contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
Person resultPerson = new ObjectMapper().readValue(result.getResponse().getContentAsString(), Person.class);
Assert.assertNotNull(person);
Assert.assertEquals(person.getId(), resultPerson.getId());
}
}
github
https://github.com/lexiaoyao1995/mock_mvc
MockMvc编写单测的更多相关文章
- 使用Groovy+Spock轻松写出更简洁的单测
当无法避免做一件事时,那就让它变得更简单. 概述 单测是规范的软件开发流程中的必不可少的环节之一.再伟大的程序员也难以避免自己不犯错,不写出有BUG的程序.单测就是用来检测BUG的.Java阵营中,J ...
- 使用Java函数接口及lambda表达式隔离和模拟外部依赖更容易滴单测
概述 单测是提升软件质量的有力手段.然而,由于编程语言上的支持不力,以及一些不好的编程习惯,导致编写单测很困难. 最容易理解最容易编写的单测,莫过于独立函数的单测.所谓独立函数,就是只依赖于传入的参数 ...
- 【spock】单测竟然可以如此丝滑
0. 为什么人人都讨厌写单测 在之前的关于swagger文章里提到过,程序员最讨厌的两件事,一件是别人不写文档,另一件就是自己写文档.这里如果把文档换成单元测试也同样成立. 每个开发人员都明白单元测试 ...
- 输入输出无依赖型函数的GroovySpock单测模板的自动生成工具(上)
目标 在<使用Groovy+Spock轻松写出更简洁的单测> 一文中,讲解了如何使用 Groovy + Spock 写出简洁易懂的单测. 对于相对简单的无外部服务依赖型函数,通常可以使用 ...
- Allure对单测结果以及robotframework结果的处理
Allure对单测结果以及robotframework结果的处理 Allure只能针对pytest的单测结果生成相应的报告: 如果需要对unittest的测试框架结果进行展示,可以使用pytest执行 ...
- 你真的会写单测吗?TDD初体验
前言: 昨天读到了一篇文章,讲的是TDD,即Test-Driven Development,测试驱动开发.大体意思是,它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过 ...
- C# Ping的例子,可用于测试网络,延迟xx毫秒 C#编写网站测速
C#编写网站测速 WebClient wcl = new WebClient(); Stopwatch spwatch = new Stopwatch(); spwatch.Start(); byte ...
- Java 单测 回滚
Java 在单测的时候 需要做回滚 设置如下: 需要添加以下 注解 在类上 defaultRollback = true : 为 默认全部回滚 defaultRollback = false : 为 ...
- Swift中编写单例的正确方式
在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的.一个状态管理的例子大家都很熟悉,那就是单例.使用Swift时,有许多方法实现单例,这是个麻烦事,因为我们不知道哪个最合适.这里我们来回顾一下单例 ...
随机推荐
- 打印java系统的信息
System.getProperties() 确定当前系统属性 Properties.list() 将获取到的信息打印到流中 public class Userone { public static ...
- python爬虫:XPath语法和使用示例
python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...
- [深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题
[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存 ...
- Docker服务开放了这个端口,服务器分分钟变肉机
之前有很多朋友提过,当使用docker-maven-plugin打包SpringBoot应用的Docker镜像时,服务器需要开放2375端口.由于开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵 ...
- markdown基础使用技巧
markdown基础使用技巧 通过``创建代码形式,不同形式可以叠加(比如:斜体+加粗) 块级元素 通过return/Enter实现切换段落/创建段落 通过shift+return/enter 实现换 ...
- 精讲RestTemplate第7篇-自定义请求失败异常处理
本文是精讲RestTemplate第7篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- Java并发-Synchronized关键字
一.多线程下的i++操作的并发问题 package passtra; public class SynchronizedDemo implements Runnable{ private static ...
- 【FJOI2007】轮状病毒 - Matrix-Tree定理
题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间的信息通道,如下图所示. n轮状病毒的产生 ...
- Android 使用Zxing报错:Channel is unrecoverably broken and will be disposed!
使用Zxing的扫描二维码库,修改成从相册识别二维码图片,根据网上的demo修改,继而在我使用的fragment报错Channel is unrecoverably broken and will b ...
- Windows下nacos单机部分发现的坑
一.下载nacos的地址: https://github.com/alibaba/nacos/releases 下载 nacos-server-1.3.2.tar.gz 就好 二.在Window ...