Controller 层编写测试类

2023-11-04

前后端分离以后,Controller 部分的代码当然也要进行测试,但是往常我们的测试类无法发送http请求,这时就需要用到 MockMvc,

一个简单的例子:

测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ControllerTest {
    protected MockMvc mockMvc;
    //集成Web环境,将会从该上下文获取相应的控制器并得到相应的MockMvc;
    @Autowired
    protected WebApplicationContext wac;

    @Before()
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();  //构造MockMvc对象
    }
    //单位数据量统计服务
    @Test
    public void goUnitDataStatSvcTest() throws Exception {
        Map<String, Object> map = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = sdf.parse("2018-11-20");
        Date endDate = sdf.parse("2018-11-23");
        map.put("startDate", "2018-11-20");
        map.put("endDate", sdf.format(endDate));
        map.put("instid", "2000");
        map.put("dateType", "other");
        log.info("总天数:"+UsedUtil.daysBetween(startDate, endDate));
        String content = JSONObject.toJSONString(map);
        String result = mockMvc.perform(post("/statistic/goUnitDataStatSvc")
                .contentType(MediaType.APPLICATION_JSON_UTF8)   // 请求中的媒体类型信息—json数据格式
                .content(content))  // RequestBody信息
                .andDo(print()) // 打印出请求和相应的内容
                .andExpect(status().isOk()) // 返回的状态是200
                .andReturn().getResponse().getContentAsString();    // 返回MvcResult并且转为字符串
        Assert.assertNotNull(result);
    }
}

 

控制层 Controller.java
@Controller
@RequestMapping("/statistic")
public class StatisticInfoController {
    @RequestMapping(value = "/goUnitDataStatSvc")
    @ResponseBody
    public ResponseMsg<Object[]> goUnitDataStatSvc(HttpServletRequest request, @RequestBody Map<String,Object> param) throws ParseException {
        // 获得参数
        String instid = userPlugins.getUser(request).getBackup1();
        Date startDate = startDateTransfer(param);
        Date endDate = endDateTransfer(param);
        // 是否选择了快捷选项,目前只有选择“全年-(month)”才有意义
        String dateType = String.valueOf(param.get("dateType")==null?"":param.get("dateType"));
        if(startDate == null || endDate == null || "".equals(instid)|| "".equals(dateType)){
            return new ResponseMsg<>();
        }
        // TODO 调用后台服务
        Object[] obj = statisticInfoService.unitDataStatSvc(startDate, endDate, instid, dateType);
        return ResponsePlugins.ok(obj);
    }
}

方法解析:

  • perform执行一个 RequestBuilder 请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
  • get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
  • param:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法
  • andExpect:添加ResultMatcher验证规则,验证控制器执行完成结果是否正确(对返回的数据进行的判断);
  • andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断);
  • andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

 

 友情提示:如果自己的测试类怎么也跑不通,请粘贴如上代码,稍加改动,跑起来在修改自己的!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Controller 层编写测试类 的相关文章

随机推荐

  • 蓝桥杯单片机组经验分享之(一)引言

    一 开篇激励 蓝桥杯单片机组真的是非常容易拿奖的 尤其是省赛 水军特别多 结合我以及我的师兄师姐的参赛经验 基本上编程题全部完成就能保证省一了 至少广东是这情况 至于想拿国一的话得靠平时专业知识的积累了 只靠程序高分是拿不到国一的 第八届我
  • 小程序使用 企业微信客户服务插件(联系我) contactPlugin

    小程序插件接入步骤 1 开发者在小程序管理后台申请使用插件 添加路径 设置 gt 第三方服务 gt 插件管理 gt 添加插件 搜索并添加插件ID wx104a1a20c3f81ec2 无需审核确认 设置 第三方服务 插件管理 添加插件 2
  • 【Linux初阶】信号入门

    hello 各位读者大大们你们好呀 系列专栏 Linux初阶 本篇内容 Linux信号的基本概念 生活信号 技术信号 信号生命周期 信号的保存位置和发送本质 信号的产生 四种方式 一个系统调用接口 作者简介 计算机海洋的新进船长一枚 请多多
  • vue自定义指令-加载指令v-loading和占位图指令v-showimg

    了解自定义指令的钩子函数 bind 每当指令绑定到元素上的时候 就会立刻执行bind这个函数 只调用一次 和css相关的操作 可以放在这个钩子函数中 inserted 元素插入到DOM中的时候 会执行inserted函数 只调用一次 upd
  • 狂神说SpringMVC02:第一个MVC程序

    狂神说SpringMVC系列连载课程 通俗易懂 基于Spring5版本 视频同步 欢迎各位狂粉转发关注学习 未经作者授权 禁止转载 Hello SpringMVC 在上一节中 我们讲解了 什么是SpringMVC以及它的执行原理 狂神说Sp
  • 图片隐写术 - 透明部落通过BMP的RGB通道隐藏PE数据

    透明部落通过BMP的RGB通道隐藏PE数据 报告和样本 Transparent Tribe APT expands its Windows malware arsenal https blog talosintelligence com 2
  • HASHGRAPH 共识算法详解

    英文版地址 http www swirlds com downloads SWIRLDS TR 2016 02 pdf 摘要 本文通过hashgraph上的一系列例子来说明Swirld hashgraph共识算法 通过结合图形来解释算法详细
  • BP神经网络实例(气温预测)及代码分析(python+tensorflow实现)

    https blog csdn net MrMaurice article details 90031937
  • 一个三本负基础学渣是怎么入行前端的?

    学渣简历 院校 上海杉达学院 上海第一第二的本科 当然是倒数 三本 专业 计算机科学与技术 根本不教前端 毕业时间 2017年 大学学到的知识 如何逃课不被点名 为什么选择计算机科学与技术专业 是喜欢男生吗 纯属巧合 我心仪的专业是护士专业
  • 增量集成测试和非增量集成测试

    增量集成测试 集成是逐步实现的 即逐次将未曾集成测试的模块和已经集成测试的模块 或 子系统 结合成程序包 再将这些模块集成为较大系统 在集成的过程中边连接边测试 以发现连接过程中产生的问题 分为 自顶向下增量式测试 自底向上增量式测试 混合
  • java 判断文件夹是否存在 没有则创建_java中实现判断文件是否存在,不存在则创建...

    一 判断文件是否存在 不存在则创建File file new File d test txt if file exists try file createNewFile catch IOException e e printStackTra
  • qt中常用lambda表达式

    qt中lambda表达式 什么是lambda 个人理解 没有函数名的函数 qt中使用基础 备注 都是在qt5中做的使用 我的qt版本是qt5 11 3 pro文件中 config c 11 常见的lambda表达式使用 延时执行操作 举例
  • LeetCode_Array_300. Longest Increasing Subsequence 最长递增子序列【动态规划】【Java】【中等】

    目录 一 题目描述 英文描述 中文描述 示例与说明 二 解题思路 三 AC代码 Java 四 解题过程 第一搏 第二搏 一 题目描述 英文描述 Given an integer array nums return the length of
  • 1-1. C++基础篇

    目录 一 第一个程序 二 注释 1 单行注释 三 变量的意义及定义方法 1 变量的意义 2 变量的定义 四 常量 1 宏常量 2 const修饰的变量构成的常量 五 关键字 六 标识符命名规则 1 标识符命名时不可使用关键字 2 标识符由字
  • 解决文件嵌套太深无法删除问题。

    在搭建前端构建工具gulp时 存在一个文件夹node modules怎么删都删不掉 一 首先可以用del以及rd 百度经验上原文开始 如果你要删除的整个文件夹以及文件夹里面的所有内容的话rd s q 盘符 某个文件夹 这样整个文件夹所有的文
  • DOTA 数据集:2806 张遥感图像,近 19 万个标注实例

    By 超神经 内容提要 DOTA 数据集是用于航拍图像中的目标检测的大型图像数据集 它可用于发现和评估航拍图像中的物体 无论从数量还是质量上来说 在同类型数据集中都具有很大优势 关键词 航拍图像 遥感数据集 大规模遥感图像数据集 挑战 CV
  • gdb调试动态库

    Happy Niu Year step1 编译一个linux动态库 头文件get h ifndef get H define get H int get int set int a endif 实现文件get cpp include
  • JavaScript 价格正则表达式

    正则表达式如下 1 9 d d 1 2 0 d 1 2 价格符合两种格式 1 9 d d 1 2 1 9开头 后跟是0 9 可以跟小数点 但小数点后要带上1 2位小数 类似2 2 0 2 1 2 22等 0 d 1 2 0开头 后可以跟小数
  • VS 2022新特性_Visual Studio2022新功能

    一 VS 2022新特性 Visual Studio2022新功能 Visual Studio 2022 正式版来了 默认支持 Net 6 默认支持C 10 下载地址 https visualstudio microsoft com zh
  • Controller 层编写测试类

    前后端分离以后 Controller 部分的代码当然也要进行测试 但是往常我们的测试类无法发送http请求 这时就需要用到 MockMvc 一个简单的例子 测试类 RunWith SpringRunner class SpringBootT