springboot利用MockMvc测试controller控制器

主要记录一下控制器的测试,service这些类测试相对简单些(可测试性强)

API测试需求比较简单:

  ① 需要返回正确的http状态码 200

  ② 需要返回json数据,并且不能返回未经捕获的系统异常

测试不通过例子

此测试类的部分代码

package cn.taxiong.search.web.controller;

import cn.taxiong.search.Application;
import cn.taxiong.search.constant.ErrorCodeMsgEnum;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SearchControllerTest {

    private MockMvc mockMvc;

    @Autowired
    protected WebApplicationContext wac;

    @Before()  //这个方法在每个方法执行之前都会执行一遍
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();  //初始化MockMvc对象
    }

    @Test
    public void shopSearch() throws Exception {

        mockMvc.perform(
                MockMvcRequestBuilders.get("/shopSearch").accept(MediaType.APPLICATION_JSON_UTF8)
                        .param("page", "1")
                        .param("pageSize", "2")
                        .param("startDate", "2018-01-01")
                        .param("endDate", "2028-01-01")
                        .param("keyword", "较场尾")
                        .param("lat", "22.22")
                        .param("lon", "42.22")
                        .param("distance", "5000")
                        .param("capacity", "2")
                        .param("style", "3")
                        .param("gt", "1")
                        .param("lt", "9900")
                        .param("keywordScope", "0")
                        .param("sort", "DEFAULT")
                        .param("service", "{6,7}")
                        .param("facilities", "{5,6}")
                        .param("shopType", "1")
                        .param("goodsCategory", "1")
        )
                .andExpect(status().isOk())  // 判断返回状态
                .andExpect(content().contentType("application/json;charset=UTF-8")) // 判断内容类型
                .andExpect(jsonPath("$.code", Matchers.not(ErrorCodeMsgEnum.SYSTEM_ERROR.getCode()))) // 如果是系统异常(未捕获的异常),则测试不通过
                .andDo(print());  //打印出请求和相应的内容
    }
}

测试通过例子:

原文地址:https://www.cnblogs.com/liugx/p/9395420.html

时间: 2024-08-29 09:32:10

springboot利用MockMvc测试controller控制器的相关文章

使用MockMvc测试controller

之前我们测试controller的时候仅仅是作为一个pojo来进行简单的测试,spring3.2后我们可以按照控制器的方式来测试Spring MVC的controller了,这样的话在测试控制器的时候,就没有必要再启动Web服务器和Web浏览器了,下面是测试代码: import com.darling.controller.TestController; import org.junit.Test; import org.springframework.test.web.servlet.Mock

springmvc中使用MockMvc测试controller

示例代码 import com.alibaba.fastjson.JSONObject; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springf

使用MockMvc测试SpringMVC Controller

MockMvc 是springTest提供的对SpringMvc提供的测试工具.这样可以让单元测试不仅仅局限于对Dao和Service 层的测试.同时,也可以测试Controller层.丰富的单元测试的功能.测试时不用频繁重启servlet容器,简化了测试操作. MockMvc需要ServletContext来模拟用户的请求和相应. 首选,需要在测试类头部添加一下Annotation @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.cl

Spring MVC如何测试Controller(使用springmvc mock测试)

在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码. 1.什么是mock测试? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法. 2.为什么要使用mock测试? 使用Mock Object进行测试,主要是用来模拟那些在应用中不容易构造(如HttpServletRequest必须在Servlet容器中才能构造出来)或者比较复杂的对象(如JD

springboot利用swagger构建api文档

一.引入jar pom.xml <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.spr

AngularJS测试二 jasmine测试路由 控制器 过滤器 事件 服务

测试应用 1.测试路由 我们需要检测路由是否在运作,是否找到了,或者是404了.我们要确认路由事件触发了,预期的模板是否真的加载了.既然路由会改变页面的地址(URL)和页面内容,我们需要检测路由是否被加载了,页面是否找到了,在这中间发生了什么. 一段简单的路由代码: angular.module('myApp', ['ngRoute']) .config(function($routeProvider) { $routeProvider .when('/', { templateUrl: 'vi

NET/ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)

阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controller的继承体系) 4.ASP.NETMVC IController Factory 控制器工厂(Controller的创建) 1]开篇介绍 经过前一篇文章.NET/ASP.NET Routing路由(深入解析路由系统架构原理) 的讲解,我们对ASP.NETRouting路由系统的整个运行机制有了一个

Springboot利用poi导出excel下载

Springboot利用poi导出excel下载 因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好的方法也请大佬们赐教. pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version&g

loadrunner入门篇 - Controller控制器

Controller组件是LR的控制中心,主要包括场景设计和场景执行两部分.在VuGen中编辑完脚本并将脚本加载到Controller组件中,即开始对脚本运行时的场景进行设计,当场景设计完成后,即可执行该场景. 场景类型介绍 Controller控制器提供了手动设计和面向目标两种测试场景.一般情况下使用手动测试场景设计方法,因为能够更灵活地按照需求来设计场景模型,使场景能更好地接近用户的真实使用.面向目标场景则是测试性能是否能达到预期的目标,在能力规划和能力验证的测试过程中经常使用到. 启动方式