1. 导入JUnit5测试框架

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>

其他按 Spring Boot 项目标准,按需引入即可

2. 编写Service

/**
* 假设一个订单类
*/
public class DemoOrder {
private String orderId;
private String orderUser;
private String contents;
private Integer quantity;
private BigDecimal price;
private BigDecimal total; // getter,setter略
}

Mapper 接口

@Mapper
public interface DemoOrderMapper {
DemoOrder selectOrderByOrderId(String orderId);
List<DemoOrder> selectOrderByOrderParam(OrderParam param);
}

Service

/**
* DemoService
* 此处的两个方法,一个是传入String,一个是传入封装好的参数类 OrderParam。这两种方法的测试方法不同
*/
public interface DemoService {
DemoOrder findOrderByOrderId(String orderId);
DemoOrder findOrderByRequestParam(OrderParam param);
}
@Service
public class DemoServiceImpl implements DemoService {
@Autowired
DemoMapper demoMapper; @Override
public DemoOrder findOrderByOrderId(String orderId) {
DemoOrder order = demoMapper.selectOrderByOrderId(orderId);
return order;
} @Override
public DemoOrder findOrderByRequestParam(OrderParam param) {
List<DemoOrder> orderList = demoMapper.selectOrderByRequestParam(param);
return CollectionUtils.isEmpty(orderList) ? null : orderList.get(0);
}
}

3. 编写测试类

@DisplayName("单元测试用例")
public class DemoServiceTest {
@InjectMocks
DemoServiceImpl demoService; // 此处注意要使用Service接口的实现类 @Mock
DemoMapper demoMapper; // 对Mapper使用Mock @BeforeEach
public void setUp() {
openMocks(this);
// 老版本是 initMocks(this);
// 准备数据
DemoOrder order1 = new DemoOrder();
order1.setOrderId("001");
order1.setOrderUser("User1");
order1.setContents("contents1");
order1.setQuantity(1);
order1.setPrice(new BigDecimal("10.5"));
order1.setTotal(new BigDecimal("10.5")); DemoOrder order2 = new DemoOrder();
order2.setOrderId("002");
// ... 其他属性略 DemoOrder order3 = new DemoOrder();
order3.setOrderId("003");
// ... 其他属性略 // 以下为mock mapper的方法模拟
// 1. 传String的方法,直接传入模拟的参数即可
when(demoMapper.selectOrderByOrderId("001")).thenReturn(order1);
when(demoMapper.selectOrderByOrderId("002")).thenReturn(order2);
// ... // 2. 传OrderParam的方法,需要将 when...thenReturn语法改为 doReturn...when... 语法
doReturn(Collections.singletonList(order1))
.when(demoMapper).selectOrderByOrderParam(argThat(
new ArgumentMatcher<OrderParam>() {
@Override
public boolean match(OrderParam param) {
return param.getOrderId().equals("001")
}
}
));
// 此处也可以将 ArgumentMatcher 单独定义 doReturn(Collections.singletonList(order2))
.when(demoMapper).selectOrderByOrderParam(argThat(
new ArgumentMatcher<OrderParam>() {
@Override
public boolean match(OrderParam param) {
return param.getOrderId().equals("002")
}
}
));
} @Test
public void findOrderByOrderIdTest() {
String orderId = "001";
DemoOrder order = demoService.findOrderByOrderId(orderId); assertThat(order.getOrderUser()).isEqualTo("User1");
} @Test
public void findOrderByOrderParamTest() {
OrderParam param = new OrderParam();
param.setOrderId("002");
DemoOrder order = demoService.findOrderByOrderParam(param); assertThat(order.getOrderUser()).isEqualTo("User2");
}
}

Spring Boot 单元测试笔记的更多相关文章

  1. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  2. Spring Boot单元测试(Mock)

    Spring Boot单元测试(Mock) Java个人学习心得 2017-08-12 16:07 Mock 单元测试的重要性就不多说了,我这边的工程一般都是Spring Boot+Mybatis(详 ...

  3. Spring Boot 单元测试示例

    Spring 框架提供了一个专门的测试模块(spring-test),用于应用程序的单元测试. 在 Spring Boot 中,你可以通过spring-boot-starter-test启动器快速开启 ...

  4. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  5. Spring Boot学习笔记(一)----概要与入门

    本文来自博客园,作者:{张果},转载请注明原文链接:{SpringBoot学习笔记(一)--SpringBoot概要与快速入门} 一.Spring Boot概要 没有Spring Boot开发项目时各 ...

  6. Spring Boot 单元测试详解+实战教程

    Spring Boot 的测试类库 Spring Boot 提供了许多实用工具和注解来帮助测试应用程序,主要包括以下两个模块. spring-boot-test:支持测试的核心内容. spring-b ...

  7. Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用[z]

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  8. spring boot 单元测试,如何使用profile

    一.问题概述 spring boot项目.单元测试的时候,我发现,总是会使用application.properties的内容,而该文件里,一般是我的开发时候的配置. 比如上图中,dev是开发配置,p ...

  9. Java程序员的日常—— Spring Boot单元测试

    关于Spring boot 之前没有用Spring的时候是用的MockMvc,做接口层的测试,原理上就是加载applicationContext.xml文件,然后模拟启动各种mybatis\连接池等等 ...

  10. Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

随机推荐

  1. git仓库之gogs安装(docker版/二进制版)

    二进制安装gogs tar zxf gogs_0.11.91_linux_amd64.tar.gz -C /data/gogs chown -R www.www /data/gogs su - www ...

  2. [kubernetes]服务健康检查

    前言 进程在运行,但是不代表应用是正常的,对此pod提供的探针可用来检测容器内的应用是否正常.k8s对pod的健康状态可以通过三类探针来检查:LivenessProbe.ReadinessProbe和 ...

  3. [转帖]Oracle中为什么需要NCHAR

    https://zhuanlan.zhihu.com/p/668402759 Oracle中已经有了char.varchar2等字符类型,为什么又弄出一个nchar.nvarchar2? Oracle ...

  4. Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase

    Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase) 前言 想着能够使用多种数据库进行一些操作. 所以本文 ...

  5. [转帖]Oracle数据库中ITL详解

    首先说明这篇文章是转载的,原文地址:http://blog.sina.com.cn/s/blog_616b428f0100lwvq.html 1.什么是ITL ITL(Interested Trans ...

  6. Windows平台文件拆分与完整性检查的过程

    Windows平台文件拆分与完整性检查的过程 场景 有时候在没有linux主机的情况下, 自己下载下来的文件比较大. 比较难以上传到一些特殊的系统/主机上面. 这个时候需要将文件进行拆分. 所以可以通 ...

  7. [转帖]TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1

    https://tidb.net/book/book-rush/features/tiflash-code/tiflash-deltatree TiFlash 是 TiDB 的分析引擎,是 TiDB ...

  8. [转帖]s3fs

    https://github.com/s3fs-fuse/s3fs-fuse s3fs allows Linux, macOS, and FreeBSD to mount an S3 bucket v ...

  9. [转帖]Python-Mock接口测试

    https://www.cnblogs.com/zhangwuxuan/p/12928850.html 前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试. 什么是mock? ...

  10. [转帖]关于winrm远程ps登录执行出现中文乱码和?乱码问题及其解决办法

    https://segmentfault.com/a/1190000040566946?utm_source=sf-similar-article python的winrm库提供了命令行远程连接的功能 ...