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

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

无参Controller单元测试示例:

  1. package com.pingan.bloan.genesis.controller.base;
  2.  
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.runner.RunWith;
  6. import com.pingan.bloan.genesis.logwrapper.LogWrapper;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import com.pingan.bloan.genesis.logwrapper.LogWrapperFactory;
  10. import org.springframework.test.context.web.WebAppConfiguration;
  11.  
  12. @RunWith(SpringRunner.class)
  13. @SpringBootTest
  14. @WebAppConfiguration
  15. public class BaseSpringBootTest {
  16. protected LogWrapper logger = LogWrapperFactory.getLogWrapper(BaseSpringBootTest.class);
  17.  
  18. @Before
  19. public void init() {
  20. logger.info("开始测试...");
  21. }
  22.  
  23. @After
  24. public void after() {
  25. logger.info("测试结束...");
  26. }
  27. }
  1. package com.pingan.bloan.genesis.controller;
  2.  
  3. import org.junit.Test;
  4. import org.junit.Before;
  5. import org.springframework.test.web.servlet.MockMvc;
  6. import org.springframework.test.web.servlet.MvcResult;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  9. import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
  10. import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
  11. import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
  12. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  13.  
  14. /**
  15. * DemoController测试
  16. * @author
  17. *
  18. */
  19. public class DemoControllerTest extends BaseSpringBootTest {
  20. @Autowired
  21. private DemoController demoController;
  22.  
  23. private MockMvc mockMvc;
  24.  
  25. @Before
  26. public void setup() {
  27. mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();
  28. }
  29.  
  30. @Test
  31. public void demo() throws Exception {
  32. MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/demo/demo"))
  33. .andExpect(MockMvcResultMatchers.status().isOk())
  34. .andDo(MockMvcResultHandlers.print())
  35. .andReturn();
  36.  
  37. logger.info(mvcResult.getResponse().getContentAsString());
  38. }
  39. }

有参Controller单元测试示例一:

  1. package com.pingan.bloan.genesis.controller;
  2.  
  3. import org.junit.Test;
  4. import org.junit.Before;
  5. import org.springframework.http.MediaType;
  6. import org.springframework.test.web.servlet.MockMvc;
  7. import org.springframework.test.web.servlet.MvcResult;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  10. import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
  11. import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
  12. import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
  13. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  14.  
  15. /**
  16. * 加解密controller测试
  17. *
  18. * @author
  19. *
  20. */
  21. public class MessageEncryptionControllerTest extends BaseSpringBootTest {
  22. @Autowired
  23. private MessageEncryptionController messageEncryptionController;
  24.  
  25. private MockMvc mockMvc;
  26.  
  27. @Before
  28. public void setup() {
  29. mockMvc = MockMvcBuilders.standaloneSetup(messageEncryptionController).build();
  30. }
  31.  
  32. /**
  33. * 加密测试
  34. * @throws Exception
  35. */
  36. @Test
  37. public void encryption() throws Exception {
  38. MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/encryption")
  39. .accept(MediaType.APPLICATION_JSON).param("originContent", "15221365094"))
  40. .andExpect(MockMvcResultMatchers.status().isOk())
  41. .andDo(MockMvcResultHandlers.print())
  42. .andReturn();
  43.  
  44. logger.info(mvcResult.getResponse().getContentAsString());
  45. }
  46.  
  47. /**
  48. * 解密测试
  49. * @throws Exception
  50. */
  51. @Test
  52. public void deciphering() throws Exception {
  53. MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/deciphering")
  54. .accept(MediaType.APPLICATION_JSON).param("secretContent", "4BD6EE1A13593F97E6CEA20A2BA9E6E4"))
  55. .andExpect(MockMvcResultMatchers.status().isOk())
  56. .andDo(MockMvcResultHandlers.print())
  57. .andReturn();
  58.  
  59. logger.info(mvcResult.getResponse().getContentAsString());
  60. }
  61. }

有参Controller单元测试示例二:

  1. package com.pingan.bloan.genesis.controller;
  2.  
  3. import org.junit.Test;
  4. import org.junit.Before;
  5. import com.alibaba.fastjson.JSONObject;
  6. import org.springframework.http.MediaType;
  7. import org.springframework.test.web.servlet.MockMvc;
  8. import org.springframework.test.web.servlet.MvcResult;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  11. import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
  12. import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
  13. import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
  14. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  15. import com.pingan.bloan.genesis.model.mobiletelephone.MobileTelephoneRequest;
  16.  
  17. /**
  18. * 客户手机掩码信息加密处理测试
  19. * @author
  20. *
  21. */
  22. public class MobileTelephoneIdempotentControllerTest extends BaseSpringBootTest {
  23. @Autowired
  24. private MobileTelephoneIdempotentController mobileTelephoneIdempotentController;
  25.  
  26. private MockMvc mockMvc;
  27.  
  28. @Before
  29. public void setup() {
  30. mockMvc = MockMvcBuilders.standaloneSetup(mobileTelephoneIdempotentController).build();
  31. }
  32.  
  33. /**
  34. * 保存加密处理的客户信息
  35. * @throws Exception
  36. */
  37. @Test
  38. public void saveCustomerEncryptionMessage() throws Exception {
  39. MobileTelephoneRequest request = new MobileTelephoneRequest();
  40. request.setCustomerId("RL20180304000099");
  41. request.setMobileTelephone("18883270484");
  42. request.setCcfMobileTelephone("13904108866");
  43.  
  44. MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/customerEncryption/save")
  45. .contentType(MediaType.APPLICATION_JSON)
  46. .content(JSONObject.toJSONString(request)))
  47. .andExpect(MockMvcResultMatchers.status().isOk())
  48. .andDo(MockMvcResultHandlers.print())
  49. .andReturn();
  50.  
  51. logger.info(mvcResult.getResponse().getContentAsString());
  52. }
  53. }

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

  1. package com.pingan.bloan.genesis.controller;
  2.  
  3. import org.junit.runners.Suite;
  4. import org.junit.runner.RunWith;
  5.  
  6. /**
  7. * 打包测试
  8. * 配置测试类,一次性执行所有配置的测试类
  9. * @author
  10. *
  11. */
  12. @RunWith(Suite.class)
  13. @Suite.SuiteClasses({MessageEncryptionControllerTest.class, DemoControllerTest.class})
  14. public class SuiteExecuteTests {
  15. // 不用写代码,只需要注解即可(在SuiteClasses中配置测试类)
  16. }

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

Spring Boot从Controller层进行单元测试的更多相关文章

  1. 关于Spring MVC Controller 层的单元测试

    关于Spring MVC Controller 层的单元测试 测试准备工作: 1.搭建测试Web环境 2.注入Controller 类 3.编写测试数据 测试数据的文件名一定要与测试类的文件名相同,比 ...

  2. Spring Boot 整合视图层技术,application全局配置文件

    目录 Spring Boot 整合视图层技术 Spring Boot 整合jsp Spring Boot 整合freemarker Spring Boot 整合视图层技术 Spring Boot 整合 ...

  3. Spring Boot的Controller控制层和页面

    一.项目实例 1.项目结构 2.项目代码 1).ActionController.Java: package com.example.controller; import java.util.Date ...

  4. Spring Boot 系列(二)单元测试&网络请求

    实际开发中,Junit单元测试是必不可少的.在spring-boot 中可以通过测试模块(spring-boot-starter-test)快速使用单元测试功能. 开始 本示例在 spring boo ...

  5. Spring Boot 整合视图层技术

    这一节我们主要学习如何整合视图层技术: Jsp Freemarker Thymeleaf 在之前的案例中,我们都是通过 @RestController 来处理请求,所以返回的内容为json对象.那么如 ...

  6. spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403

    1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...

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

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

  8. spring boot利用controller来测试写的类

    我们在开发spring boot应用程序的时候,往往需要测试某个写好的类,但是在测试的时候发现不太好测试,用Junit等测试框架,总是会报一些问题,大致是找不到配置文件以及无法利用spring创建的对 ...

  9. Spring Boot 整合Web 层技术(整合Servlet)

    1 整合Servlet 方式一1.1通过注解扫描完成Servlet 组件的注册      1.1.1创建Servlet /*** 整合Servlet 方式一*/@WebServlet(name = & ...

随机推荐

  1. whistle--全新的跨平台web调试工具

    版权声明:本文由吴文斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/151 来源:腾云阁 https://www.qclo ...

  2. flash 逐字,逐行歌词实现,添加伪3D效果

    项目结构: 效果如图: 项目为公司项目,下载人员禁止用于商业项目中. 项目开发工具:FlashDevelop 点击下载

  3. C++,一些常用的知识点

    用typedef定义数组.指针.结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读 性. C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象 ...

  4. Linux系统下 Supervisor 安装搭建

    在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常.报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务. 所以,就需要一个工具,时刻监控 web 应用 ...

  5. js获取元素的外链样式

    一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可d ...

  6. 02.MyBatis配置文件详解

        MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/  1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis ...

  7. 传智播客微金所项目实战移动web开发

    1.源码笔记 我的源码+笔记(很重要):链接: http://pan.baidu.com/s/1kULKqcJ 感谢传智播客项目相关视频:1.6天 链接: https://pan.baidu.com/ ...

  8. hihoCoder_1445_后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  9. Oracle AWR之-enq: TX - allocate ITL entry

    今天收到压力测试期间awr报告,测试人员要我看看数据库是否有可以优化的地方,数据库服务器配置信息:CPU:32*8,内存:480g 单实例数据库:oracle 11.2.0.4.具体分析过程如下: 可 ...

  10. Systemd unit generators unit

    systemd.generator(7) - Linux manual page http://man7.org/linux/man-pages/man7/systemd.generator.7.ht ...