介绍

概述

  在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个jar包放环境里跑跑看看能不能通,殊不知在各个业务方法中已经漏洞百出,修复一个打一个包,再继续修复,这种效率真的太低下。

  所以我们需要借助一些单元测试来将我们写的代码做一些测试,这样保证局部方法正确,最后再打包整体运行将整个流程再串起来就能提高开发试错效率。当然,我们除了单元测试,我们还可以通过main()方法在每个类中进行测试,文中会一带而过。

常用注解

  • @RunWith(SpringRunner.class):测试运行器,作用类
  • @SpringBootTest:SpringBoot测试类,作用类
  • @Test:测试方法,作用方法
  • @Ignore:忽略测试方法,作用方法
  • @BeforeClass:针对所有测试,只执行一次,且必须为static void
  • @Before:初始化方法,执行当前测试类的每个测试方法前执行
  • @After:释放资源,执行当前测试类的每个测试方法后执行
  • @AfterClass:针对所有测试,只执行一次,且必须为static void

作者:hadoop_a9bb

链接:https://www.jianshu.com/p/81fc2c98774f

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

模板

依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-test</artifactId>
  4. <scope>test</scope>
  5. </dependency>

spring-boot-starter-test 内部包含了junit功能。

controller层单元测试模板

controller层示例

  1. import org.springframework.web.bind.annotation.RequestMapping;
  2. import org.springframework.web.bind.annotation.RequestMethod;
  3. import org.springframework.web.bind.annotation.RestController;
  4. /**
  5. * @author Andya
  6. * @create 2020-04-22 22:41
  7. */
  8. @RestController
  9. public class HelloController {
  10. @RequestMapping(value = "/hello", method = RequestMethod.GET)
  11. public String hello() {
  12. return "hello";
  13. }
  14. }

controller层单元测试类

  1. import org.junit.Before;
  2. import org.junit.Test;
  3. import org.springframework.http.MediaType;
  4. import org.springframework.test.web.servlet.MockMvc;
  5. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  6. import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
  7. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  8. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  9. /**
  10. * @author Andya
  11. * @create 2020-06-02 13:59
  12. */
  13. public class HelloControllerTest {
  14. private MockMvc mockMvc;
  15. @Before
  16. public void setUp() throws Exception{
  17. mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
  18. }
  19. @Test
  20. public void getHello() throws Exception{
  21. mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
  22. .andExpect(status().isOk())
  23. .andDo(MockMvcResultHandlers.print())
  24. .andReturn();
  25. }
  26. }

service层单元测试模板

service层示例

  1. import org.springframework.stereotype.Service;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. /**
  5. * @author Andya
  6. * @create 2020-06-01 9:30
  7. */
  8. @Service
  9. public class TwoSum {
  10. public static int[] twoSum1(int[] nums, int target) {
  11. Map<Integer, Integer> map = new HashMap();
  12. for (int i = 0; i < nums.length; i++){
  13. map.put(nums[i], i);
  14. }
  15. System.out.println(map);
  16. for (int i = 0; i < nums.length; i++) {
  17. int result = target - nums[i];
  18. if(map.containsKey(result) && map.get(result) != i) {
  19. return new int[] {i,map.get(result)};
  20. }
  21. }
  22. throw new IllegalArgumentException("No two sum solution");
  23. }
  24. public static int[] twoSum(int[] nums, int target) {
  25. for (int i = 0; i < nums.length; i++){
  26. for(int j = i+1; j < nums.length;j++) {
  27. if (nums[i] + nums[j] == target) {
  28. return new int[]{i, j};
  29. }
  30. }
  31. }
  32. return null;
  33. }
  34. public static int[] twoSum2(int[] nums, int target){
  35. Map<Integer, Integer> map = new HashMap<>();
  36. for (int i = 0; i < nums.length; i++) {
  37. //计算结果
  38. int result = target - nums[i];
  39. //map中是否包含这个结果,若包含则返回该结果,及对应的目前数组的index
  40. if (map.containsKey(result)) {
  41. //map是后添加元素的,所以map索引在前,i在后
  42. return new int[]{map.get(result), i};
  43. }
  44. map.put(nums[i], i);
  45. }
  46. throw new IllegalArgumentException("no two sum solution");
  47. }
  48. }

service层单元测试类

  1. import com.example.andya.demo.service.algorithm.TwoSum;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. /**
  8. * @author Andya
  9. * @create 2020-06-02 14:36
  10. */
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class TwoSumTest {
  14. @Autowired
  15. TwoSum twoSum;
  16. @Test
  17. public void testSum1(){
  18. int[] nums = new int[] {1,1,3};
  19. int[] newNums = twoSum.twoSum1(nums,2);
  20. System.out.println(newNums[0] + ":" +newNums[1]);
  21. }
  22. @Test
  23. @Ignore
  24. public void testSum2() {
  25. int[] nums = new int[] {2,2,4};
  26. int[] newNums = twoSum.twoSum2(nums,4);
  27. System.out.println(newNums[0] + ":" +newNums[1]);
  28. }
  29. }

SpringBoot—单元测试模板(controller层和service层)的更多相关文章

  1. DAO层,Service层,Controller层、View层 的分工合作

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  2. [转]DAO层,Service层,Controller层、View层

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  3. DAO层,Service层,Controller层、View层

    DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...

  4. 分层 DAO层,Service层,Controller层、View层

    前部分摘录自:http://blog.csdn.net/zdwzzu2006/article/details/6053006 DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务 ...

  5. DAO层,Service层,Controller层、View层介绍

    来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...

  6. DAO层,Service层,Controller层、View层协同工作机制

    转自 http://www.blogdaren.com/post-2024.html DAO层:DAO层主要是做数据持久层的工 作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计D ...

  7. DAO层,Service层,Controller层、View层、entity层

    1.DAO(mapper)层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就 ...

  8. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

  9. 搭建DAO层和Service层代码

    第一部分建立实体和映射文件 1 通过数据库生成的实体,此步骤跳过,关于如何查看生成反向工程实体类查看SSH框架搭建教程-反向工程章节 Tmenu和AbstractorTmenu是按照数据库表反向工程形 ...

随机推荐

  1. CtsSecurityTestCases#ListeningPortsTest定位tcp端口与pid

    CtsSecurityTestCases#ListeningPortsTest定位tcp端口与pid [问题描述] cts失败项 armeabi-v7a CtsSecurityTestCases an ...

  2. {bzoj2338 [HNOI2011]数矩形 && NBUT 1453 LeBlanc}平面内找最大矩形

    思路: 枚举3个点,计算第4个点并判断是否存在,复杂度为O(N3logN)或O(N3α) 考虑矩形的对角线,两条对角线可以构成一个矩形,它们的长度和中点必须完全一样,于是将所有线段按长度和中点排序,那 ...

  3. [zoj3623]背包模型

    给定n种物品,每种物品需要ti时间生产出来,生产出来以后,每单位时间可以创造wi个价值.如果需要创造至少W个价值,求最少时间. 思路:dp[j]表示用时间j所能创造的最大价值,则有转移方程:dp[j ...

  4. JVM入门--类加载器

    一.基础架构 概览 我们平时说的栈是指的Java栈,native method stack 里面装的都是native方法 细节架构图 二.类加载器 1.类的加载 方法区并不是存放方法的区域,其是存放类 ...

  5. hdoj 1874 dijkstra

    在做PAT的甲1003,思考DFS和图什么的,时间紧张直接去看柳神(日后上传柳神的C++版本)的订阅,得知是dijkstra,转去用hdoj 1874练手,写了两天,终于调出来了 题目链接:http: ...

  6. java ->斗地主洗牌

    import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util ...

  7. 题解 P2421 【[NOI2002]荒岛野人】

    我的第一道数论紫题 首先,我们先看两个野人,他们相遇的充要条件是 \(C_i+P_i\times k\equiv C_j+P_j\times k\;(mod\;M)\) 其中\(k\)是第几年,且\( ...

  8. tomcat和nginx介绍

    tomcat为什么需要装java环境? 因为tomcat是用java写的, 所以运行需要JRE,就是JAVA运行时刻环境,所以必须通过安装JDK来得到这个运行环境,不装JDK装JRE也行sun的网站上 ...

  9. 「雕爷学编程」Arduino动手做(17)---人体感应模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  10. ArrayList详解-源码分析

    ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...