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

一般单元测试都是测试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. EntityFramework6.X 之 Fulent
  2. java menu字体_Java开发网 - 请问如何让菜单字体变宋体?
  3. pdf形式是什么意思
  4. 使用嵌套类/临时类保存数据
  5. 一套键鼠控制多台电脑的使用方法,快收藏
  6. java正则判断11位手机号码_java-正则表达式判断手机号
  7. 阿里云域名绑定IP手把手教学
  8. elasticsearch中forcemerge清除文件占用的磁盘空间
  9. 将<span>标签设为圆形
  10. Android系统的system/app和system/priv-app
  11. MAC OSX stdio.h或iostream等头文件无法找到的解决办法
  12. poi操作word文档总结
  13. 教你如何轻松解密Md5密码
  14. lna的噪声参数以及功率传输S11 S22
  15. 利用iframe跨域请求
  16. 新品周刊 | 内马尔携手极度干燥推出内衣系列;安踏儿童与中国航天推出热返科技羽绒服...
  17. ROC 曲线介绍以及 python 画法
  18. IIoT可预测运维报告摘要
  19. 【电脑端】腾讯视频PC端微信截图扫码失败解决办法
  20. Popcap Framework 一个游戏框架(c++)

热门文章

  1. leetcode解题报告:Interleaving String
  2. Java 使用 Dom4j 解析 XML 指南
  3. listview中getview异步加载网络图片
  4. python 制作动画片_cocos2d from python Animation 动画片的实现
  5. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9443 -j DNAT
  6. linux的O的字体让我满意那些
  7. mysql-------流程控制结构
  8. android SQLite常用数据类型
  9. 30个超实用Python代码片段
  10. 10大Go语言开源项目推荐