单元测试是程序员对代码的自测,一般公司都会严格要求单元测试,这是对自己代码的负责,也是对代码的敬畏。

一般单元测试都是测试Service层,下面我将演示从Controller层进行单元测试。

无参Controller单元测试示例:

package com.pingan.bloan.genesis.controller.base;import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import com.pingan.bloan.genesis.logwrapper.LogWrapper;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.pingan.bloan.genesis.logwrapper.LogWrapperFactory;
import org.springframework.test.context.web.WebAppConfiguration;@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class BaseSpringBootTest {protected LogWrapper logger = LogWrapperFactory.getLogWrapper(BaseSpringBootTest.class);@Beforepublic void init() {logger.info("开始测试...");}@Afterpublic void after() {logger.info("测试结束...");}
}

package com.pingan.bloan.genesis.controller;import org.junit.Test;
import org.junit.Before;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;/*** DemoController测试* @author **/
public class DemoControllerTest extends BaseSpringBootTest {@Autowiredprivate DemoController demoController;private MockMvc mockMvc;@Beforepublic void setup() {mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();}@Testpublic void demo() throws Exception {MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/demo/demo")).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();logger.info(mvcResult.getResponse().getContentAsString());}
}

有参Controller单元测试示例一:

package com.pingan.bloan.genesis.controller;import org.junit.Test;
import org.junit.Before;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;/*** 加解密controller测试* * @author **/
public class MessageEncryptionControllerTest extends BaseSpringBootTest {@Autowiredprivate MessageEncryptionController messageEncryptionController;private MockMvc mockMvc;@Beforepublic void setup() {mockMvc = MockMvcBuilders.standaloneSetup(messageEncryptionController).build();}/*** 加密测试* @throws Exception */@Testpublic void encryption() throws Exception {MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/encryption").accept(MediaType.APPLICATION_JSON).param("originContent", "15221365094")).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();logger.info(mvcResult.getResponse().getContentAsString());}/*** 解密测试* @throws Exception */@Testpublic void deciphering() throws Exception {MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/deciphering").accept(MediaType.APPLICATION_JSON).param("secretContent", "4BD6EE1A13593F97E6CEA20A2BA9E6E4")).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();logger.info(mvcResult.getResponse().getContentAsString());}
}

有参Controller单元测试示例二:

package com.pingan.bloan.genesis.controller;import org.junit.Test;
import org.junit.Before;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import com.pingan.bloan.genesis.model.mobiletelephone.MobileTelephoneRequest;/*** 客户手机掩码信息加密处理测试* @author **/
public class MobileTelephoneIdempotentControllerTest extends BaseSpringBootTest {@Autowiredprivate MobileTelephoneIdempotentController mobileTelephoneIdempotentController;private MockMvc mockMvc;@Beforepublic void setup() {mockMvc = MockMvcBuilders.standaloneSetup(mobileTelephoneIdempotentController).build();}/*** 保存加密处理的客户信息* @throws Exception */@Testpublic void saveCustomerEncryptionMessage() throws Exception {MobileTelephoneRequest request = new MobileTelephoneRequest();request.setCustomerId("RL20180304000099");request.setMobileTelephone("18883270484");request.setCcfMobileTelephone("13904108866");MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/customerEncryption/save").contentType(MediaType.APPLICATION_JSON).content(JSONObject.toJSONString(request))).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();logger.info(mvcResult.getResponse().getContentAsString());}
}

Suite一次性执行多个单元测试:

package com.pingan.bloan.genesis.controller;import org.junit.runners.Suite;
import org.junit.runner.RunWith;/*** 打包测试* 配置测试类,一次性执行所有配置的测试类* @author **/
@RunWith(Suite.class)
@Suite.SuiteClasses({MessageEncryptionControllerTest.class, DemoControllerTest.class})
public class SuiteExecuteTests {// 不用写代码,只需要注解即可(在SuiteClasses中配置测试类)
}

代码单元测试,让代码更加健壮。

转载于:https://www.cnblogs.com/dushenzi/p/10654864.html

Spring Boot从Controller层进行单元测试相关推荐

  1. 有啥不同?来看看Spring Boot 基于 JUnit 5 实现单元测试

    作者:又语 www.jianshu.com/p/4648fd55830e 本文介绍 Spring Boot 2 基于 JUnit 5 的单元测试实现方案. 目录 简介 JUnit 4 和 JUnit ...

  2. SpringBoot使用MockMvc对Controller层进行单元测试

    Mockito是GitHub上使用最广泛的Mocking框架.它提供简洁的API来测试.Mockito简单易学.可读性强.验证语法简洁. [示例]使用Mockito框架,对Controller层进行单 ...

  3. 访问指定html页面,Spring boot的Controller类是如何指定HTML页面的

    Spring boot的Controller类是指定HTML页面的实现的方法如下: 1.在spring boot中借鉴servlet的方法输出html: @RequestMapping(value=& ...

  4. java中的controller_详解Spring Boot中Controller用法

    Controller Controller是SpringBoot里最基本的组件,他的作用是把用户提交来的请求通过对URL的匹配,分配个不同的接收器,再进行处理,然后向用户返回结果.他的重点就在于如何从 ...

  5. Spring Boot中DAO层和Service层等理解

    Spring Boot中DAO等层的理解 1 DAO层 2 Service层 3 Controller层 4 Entity层 5 View层 6 Utils层 总结 目前在公司实习python算法研究 ...

  6. 【spring boot】Controller @RequestMapping 数据绑定:接收 Date 类型参数时遇错,将 String 类型的参数转换成 Date 类型

    前言 spring boot 2.1.1.RELEASE 遇错 Failed to convert value of type 'java.lang.String' to required type ...

  7. Spring Boot(十二)单元测试JUnit

    一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测 ...

  8. spring aop 记录controller层的入参和出参

    日志的重要性在项目中不言而喻, 但是对controller层的出入参一个一个的添加, 将是一个比较枯燥的事情, 可以考虑使用aop来记录. spring项目中的全局异常处理有两种模式,其一是实现Han ...

  9. java如何测controller层_用MockMvc对Spring mvc中的controller层进行单元测试

    参考:http://sishuok.com/forum/posts/list/7981.html  ;  http://www.tuicool.com/articles/6nqeIbm 用下面的这种方 ...

最新文章

  1. 扫地机器人评测 毛发_会切毛发的机器人?海尔扫地机P70抢先评测
  2. 星巴克、苹果、谷歌、亚马逊等巨头,为何同时做这件事?
  3. SpringBoot+Jquery实现前后端数据交互
  4. [leetcode] 198.打家劫舍
  5. JBPM工作流(七)——详解流程图
  6. LeetCode 492. 构造矩形
  7. 要让玩家买单的facebook中文网
  8. 2017.3.12 lzy 测试
  9. 大型分布式架构详解:架构模式+敏捷性+可扩展+案例等
  10. angular组件图标无法显示的问题
  11. 职工信息管理系统—C语言工程实践
  12. 苹果电脑怎样下载爱奇艺
  13. LabWindows/CVI入门之第二章:GUI开发
  14. 全面揭露网络交易出现的十大欺诈骗术
  15. python人民币小写转大写_python人民币小写转大写辅助工具
  16. 扶桑之伤 作者:长铗
  17. JAV spi 和扩展方式
  18. 小米id锁状态查询_揭秘:苹果隐藏ID到底是什么?你可能就被坑了!
  19. 万字长文:读懂微服务编排利器Zeebe
  20. 数据结构—1.时间复杂度

热门文章

  1. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”解决方法
  2. java成员修饰词 友好的_Java的类成员访问权限修饰词(以及类访问权限)
  3. 二叉搜索树 java_二叉查找树之 Java的实现【下】
  4. 机器人弹古筝图片_古筝维修:40年的牡丹牌古筝,动了个外科手术
  5. 文本词频统计是字典吗_TF-IDF词频逆文档频次算法
  6. mysql------事务
  7. 数据库没有备份---应如何还原丢失的数据
  8. 2019-04-01
  9. unity中使用protobuf-net
  10. 微信小程序开发资料汇总