介绍

概述

  在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个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

来源:简书

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

模板

依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

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

controller层单元测试模板

controller层示例

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Andya
* @create 2020-04-22 22:41
*/ @RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "hello";
}
}

controller层单元测试类

import org.junit.Before;
import org.junit.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /**
* @author Andya
* @create 2020-06-02 13:59
*/
public class HelloControllerTest { private MockMvc mockMvc; @Before
public void setUp() throws Exception{
mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
} @Test
public void getHello() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
} }

service层单元测试模板

service层示例

import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map; /**
* @author Andya
* @create 2020-06-01 9:30
*/
@Service
public class TwoSum { public static int[] twoSum1(int[] nums, int target) { Map<Integer, Integer> map = new HashMap();
for (int i = 0; i < nums.length; i++){
map.put(nums[i], i);
}
System.out.println(map);
for (int i = 0; i < nums.length; i++) {
int result = target - nums[i];
if(map.containsKey(result) && map.get(result) != i) {
return new int[] {i,map.get(result)};
}
}
throw new IllegalArgumentException("No two sum solution");
} public static int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++){
for(int j = i+1; j < nums.length;j++) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};
}
}
}
return null; } public static int[] twoSum2(int[] nums, int target){
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
//计算结果
int result = target - nums[i];
//map中是否包含这个结果,若包含则返回该结果,及对应的目前数组的index
if (map.containsKey(result)) {
//map是后添加元素的,所以map索引在前,i在后
return new int[]{map.get(result), i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("no two sum solution");
}
}

service层单元测试类

import com.example.andya.demo.service.algorithm.TwoSum;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; /**
* @author Andya
* @create 2020-06-02 14:36
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TwoSumTest {
@Autowired
TwoSum twoSum; @Test
public void testSum1(){
int[] nums = new int[] {1,1,3};
int[] newNums = twoSum.twoSum1(nums,2);
System.out.println(newNums[0] + ":" +newNums[1]);
} @Test
@Ignore
public void testSum2() {
int[] nums = new int[] {2,2,4};
int[] newNums = twoSum.twoSum2(nums,4);
System.out.println(newNums[0] + ":" +newNums[1]);
} }

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. Linux权限管理、系统进程管理

    权限管理 linux系统中分为四种角色 u=user 当前用户   g=group 同组用户   o=other 其他用户   a=all 代表所有用户 三种权限 r=read 可读 w=write ...

  2. spring表达式语言

    使用文本表达式 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http: ...

  3. 折腾了一晚上的“equals”和“==”

    最近在仿写美团这个项目的时候,遇到了一点关于字符串比较的问题,这里记录一下,避免以后再犯. 由于之前学c语言的时候,习惯性用“==”进行比较,初识Java,不知道有什么别的方法可以进行字符串比较,于是 ...

  4. 假如用王者荣耀的方式学习webpack

    英雄介绍 崴博.派克诞生于遥远西方的勇士之地,拥有着高超的机械技艺,善于运用各种工具来实现一些看似不可能完成的事.游历王者大陆时机缘巧合遇到了年轻的墨子,与之成为好友.后协助大宗师墨子建造了大陆第一雄 ...

  5. 使用 Visual Studio Code 搭建 C/C++ 开发和调试环境

    文章目录 1. 安装 C/C++ 插件 2. 安装 MinGW-w64 并配置好环境变量 3. 测试环境变量是否配置正确 4. 创建和设置 C 语言开发工作区 5. 编写你的第一个 C 语言程序 6. ...

  6. GNU ARM 汇编基础

    ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...

  7. 设计模式之GOF23工厂模式02

    抽象工厂模式 不能添加单个产品,产品族 public interface Seat {  void anmo();}class GoodSeat implements Seat { @Override ...

  8. [hdu4622 Reincarnation]后缀数组

    题意:给一个长度为2000的字符串,10000次询问区间[L,R]内的不同子串的个数 思路:对原串的每个前缀求一边后缀数组,询问[L,R]就变成了询问[L,n]了,即求一个后缀里面出现了多少个不同子串 ...

  9. XSS挑战之旅(通过看代码解题)

    XSS 挑战之旅 level 1 没有什么过滤 payload: <script>alert(1)</script> level 2 php关键代码: echo "& ...

  10. 微信小程序开发实战(1):使用滚动视图

    本文主要介绍了滚动视图组件(scroll-view)的各种常用功能,例如,垂直和水平滚动.滚动事件等,并通过例子代码来演示这些功能的使用方法.   1. 垂直滚动视图 scroll-view是容器组件 ...