Spring Boot从Controller层进行单元测试
单元测试是程序员对代码的自测,一般公司都会严格要求单元测试,这是对自己代码的负责,也是对代码的敬畏。
一般单元测试都是测试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);
- @Before
- public void init() {
- logger.info("开始测试...");
- }
- @After
- public 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 {
- @Autowired
- private DemoController demoController;
- private MockMvc mockMvc;
- @Before
- public void setup() {
- mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();
- }
- @Test
- public 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 {
- @Autowired
- private MessageEncryptionController messageEncryptionController;
- private MockMvc mockMvc;
- @Before
- public void setup() {
- mockMvc = MockMvcBuilders.standaloneSetup(messageEncryptionController).build();
- }
- /**
- * 加密测试
- * @throws Exception
- */
- @Test
- public 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
- */
- @Test
- public 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 {
- @Autowired
- private MobileTelephoneIdempotentController mobileTelephoneIdempotentController;
- private MockMvc mockMvc;
- @Before
- public void setup() {
- mockMvc = MockMvcBuilders.standaloneSetup(mobileTelephoneIdempotentController).build();
- }
- /**
- * 保存加密处理的客户信息
- * @throws Exception
- */
- @Test
- public 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中配置测试类)
- }
代码单元测试,让代码更加健壮。
Spring Boot从Controller层进行单元测试的更多相关文章
- 关于Spring MVC Controller 层的单元测试
关于Spring MVC Controller 层的单元测试 测试准备工作: 1.搭建测试Web环境 2.注入Controller 类 3.编写测试数据 测试数据的文件名一定要与测试类的文件名相同,比 ...
- Spring Boot 整合视图层技术,application全局配置文件
目录 Spring Boot 整合视图层技术 Spring Boot 整合jsp Spring Boot 整合freemarker Spring Boot 整合视图层技术 Spring Boot 整合 ...
- Spring Boot的Controller控制层和页面
一.项目实例 1.项目结构 2.项目代码 1).ActionController.Java: package com.example.controller; import java.util.Date ...
- Spring Boot 系列(二)单元测试&网络请求
实际开发中,Junit单元测试是必不可少的.在spring-boot 中可以通过测试模块(spring-boot-starter-test)快速使用单元测试功能. 开始 本示例在 spring boo ...
- Spring Boot 整合视图层技术
这一节我们主要学习如何整合视图层技术: Jsp Freemarker Thymeleaf 在之前的案例中,我们都是通过 @RestController 来处理请求,所以返回的内容为json对象.那么如 ...
- spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403
1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...
- Spring Boot(十二)单元测试JUnit
一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. 白盒测 ...
- spring boot利用controller来测试写的类
我们在开发spring boot应用程序的时候,往往需要测试某个写好的类,但是在测试的时候发现不太好测试,用Junit等测试框架,总是会报一些问题,大致是找不到配置文件以及无法利用spring创建的对 ...
- Spring Boot 整合Web 层技术(整合Servlet)
1 整合Servlet 方式一1.1通过注解扫描完成Servlet 组件的注册 1.1.1创建Servlet /*** 整合Servlet 方式一*/@WebServlet(name = & ...
随机推荐
- whistle--全新的跨平台web调试工具
版权声明:本文由吴文斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/151 来源:腾云阁 https://www.qclo ...
- flash 逐字,逐行歌词实现,添加伪3D效果
项目结构: 效果如图: 项目为公司项目,下载人员禁止用于商业项目中. 项目开发工具:FlashDevelop 点击下载
- C++,一些常用的知识点
用typedef定义数组.指针.结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读 性. C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象 ...
- Linux系统下 Supervisor 安装搭建
在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常.报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务. 所以,就需要一个工具,时刻监控 web 应用 ...
- js获取元素的外链样式
一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可d ...
- 02.MyBatis配置文件详解
MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/ 1.properties 属性 1.在MyBatis配置文件中引用属性文件 MyBatis ...
- 传智播客微金所项目实战移动web开发
1.源码笔记 我的源码+笔记(很重要):链接: http://pan.baidu.com/s/1kULKqcJ 感谢传智播客项目相关视频:1.6天 链接: https://pan.baidu.com/ ...
- hihoCoder_1445_后缀自动机二·重复旋律5
#1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...
- Oracle AWR之-enq: TX - allocate ITL entry
今天收到压力测试期间awr报告,测试人员要我看看数据库是否有可以优化的地方,数据库服务器配置信息:CPU:32*8,内存:480g 单实例数据库:oracle 11.2.0.4.具体分析过程如下: 可 ...
- Systemd unit generators unit
systemd.generator(7) - Linux manual page http://man7.org/linux/man-pages/man7/systemd.generator.7.ht ...