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编写单测的更多相关文章

  1. 使用Groovy+Spock轻松写出更简洁的单测

    当无法避免做一件事时,那就让它变得更简单. 概述 单测是规范的软件开发流程中的必不可少的环节之一.再伟大的程序员也难以避免自己不犯错,不写出有BUG的程序.单测就是用来检测BUG的.Java阵营中,J ...

  2. 使用Java函数接口及lambda表达式隔离和模拟外部依赖更容易滴单测

    概述 单测是提升软件质量的有力手段.然而,由于编程语言上的支持不力,以及一些不好的编程习惯,导致编写单测很困难. 最容易理解最容易编写的单测,莫过于独立函数的单测.所谓独立函数,就是只依赖于传入的参数 ...

  3. 【spock】单测竟然可以如此丝滑

    0. 为什么人人都讨厌写单测 在之前的关于swagger文章里提到过,程序员最讨厌的两件事,一件是别人不写文档,另一件就是自己写文档.这里如果把文档换成单元测试也同样成立. 每个开发人员都明白单元测试 ...

  4. 输入输出无依赖型函数的GroovySpock单测模板的自动生成工具(上)

    目标 在<使用Groovy+Spock轻松写出更简洁的单测> 一文中,讲解了如何使用 Groovy + Spock 写出简洁易懂的单测. 对于相对简单的无外部服务依赖型函数,通常可以使用 ...

  5. Allure对单测结果以及robotframework结果的处理

    Allure对单测结果以及robotframework结果的处理 Allure只能针对pytest的单测结果生成相应的报告: 如果需要对unittest的测试框架结果进行展示,可以使用pytest执行 ...

  6. 你真的会写单测吗?TDD初体验

    前言: 昨天读到了一篇文章,讲的是TDD,即Test-Driven Development,测试驱动开发.大体意思是,它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过 ...

  7. C# Ping的例子,可用于测试网络,延迟xx毫秒 C#编写网站测速

    C#编写网站测速 WebClient wcl = new WebClient(); Stopwatch spwatch = new Stopwatch(); spwatch.Start(); byte ...

  8. Java 单测 回滚

    Java 在单测的时候 需要做回滚 设置如下: 需要添加以下 注解 在类上 defaultRollback = true : 为 默认全部回滚 defaultRollback = false : 为 ...

  9. Swift中编写单例的正确方式

    在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的.一个状态管理的例子大家都很熟悉,那就是单例.使用Swift时,有许多方法实现单例,这是个麻烦事,因为我们不知道哪个最合适.这里我们来回顾一下单例 ...

随机推荐

  1. html标签知识(无表单、表格)

    <meta> : 定义在head中 <hgroup></hgroup> : 标题分组标签 <br>: 换行标签 !  : 空行 <p>< ...

  2. ORACLE在linux下的启动方法

    一.启动方法 方法1: Sql代码 cd $ORACLE_HOME/bin #进入到oracle的安装目录  ./dbstart #重启服务器  ./lsnrctl start #重启监听器 ---- ...

  3. jQuery 选择器笔记

    jquery基础选择器 $('选择器') 基本上与css选择器相同     demo     $('ul li')     $('.nav')     $('#box')   隐试迭代     遍历内 ...

  4. 使用Spock 单元测试

    一.什么是Spock Spock 是一个测试框架,甚至可以说是一门语言他是基于Groovy开发的.它的语法完全遵循 BDD(行为驱动开发) 风格的结构.它是基于 Junit test runner 上 ...

  5. 又一个小而美的Java Web框架: Solon!

    Solon 是Java世界里一个新的极易上手的Web框架.参考过 Javalin . Spring 等很多现有框架的设计. 取名自海贼王里的角色,说是希能像他一样能打 小.真的是小.最小的运行单位只有 ...

  6. Eclipse变得很卡

    半个月前,发现Eclipse很卡很卡,尤其在按住Ctrl选择方法的实现类的时候,电脑的反应速度让开发者无法忍受. Eclipse还经常未响应状态. 开始以为Eclipse的运行内存设置小了,把ecli ...

  7. JDBC工具类—如何封装JDBC

    “获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils.提供获取连接对象的方法,从而达到代码的重复利用. 该工具类提供方法:public static Conne ...

  8. externaltrafficpolicy的有关问题说明

    环境描述 生产环境通过gitlab-running实现自动化发布业务,现需要收集客户端的真实ip,需要将externaltrafficpolicy改为lacal模式(原来是cluster模式),前天开 ...

  9. golang 的 string包

    前言 不做文字搬运工,多做思路整理 就是为了能速览标准库,只整理我自己看过的...... 注意!!!!!!!!!! 单词都是连着的,我是为了看着方便.理解方便才分开的 1.string 中文文档 [英 ...

  10. 牛X!看完阿里P8架构师推荐的spring三剑客,成功涨薪5k

    一直以来,Spring都被Java程序员视为杀手级别的应用,是为简化Java EE应用程序的开发为目标而创建的.Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于 ...