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 = & ...
随机推荐
- LeetCode——Kth Largest Element in an Array
Description: Find the kth largest element in an unsorted array. Note that it is the kth largest elem ...
- 【BZOJ3003】LED BFS+状压DP
[BZOJ3003]LED Description LED屏是由一个庞大的点阵小灯泡组成的,一开始每个小灯泡都不发光.每一行一共有N个小灯泡,依次标号为1~n.现在给定K个点,要求这K个点发光,其余点 ...
- 3.html+.ashx(删除学生信息)
C03ListStu.ashx 0:false(删除);1:true(正常). (数据库里定义个BOOL型,TRUE表示正常FALSE表示删除) <html> <head> & ...
- Powerdesigner逆向工程从sql server数据库生成pdm【转】
Powerdesigner逆向工程从sql server数据库生成pdm 第一步:打开"控制面板"中的"管理工具" 第二步:点击"管理工具" ...
- 南京网络赛J-Sum【数论】
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- 字符串函数---atof()函数详解
atof()函数 atof(),是C 语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数,所使用的头文件为<stdlib.h>.该函数名是 “ascii to floating ...
- binlog分析方法
线上处理问题的时候经常遇到业务说写入了但是数据不对,这种情况八成是业务改了之后又改过来了.但是我们需要证据,下面我们就说说简单的binlog分析 工具:mysqlbinlog #-vvv显示明文sql ...
- OGG双向复制
注意:在进行如下配置之前,先在源数据库(原来的目标数据库)端添加辅助的redolog配置: 1.SQL> alter database add supplemental log dat ...
- 分区默认segment大小变化(64k—>8M)
_partition_large_extents和_index_partition_large_extents 参考: http://www.xifenfei.com/2013/08/%E5%88%8 ...
- Python实现Table To Point代码 分类: Python 2015-07-31 18:45 3人阅读 评论(0) 收藏
</pre><pre name="code" class="python"><span style="font-fami ...