目录

一、前言

二、Maven依赖

2.1 JUNIT5

2.2 Mockito3

2.3 surefire

三、UT示例

3.1 业务代码

3.2 单元测试

一、前言

JUNIT和Mockito这两个单元测试框架在Java工程中被广泛应用。

但到2021年,仍有很多开发者在使用JUNIT4+Mockito2+PowerMock,但不得不说,这套配置已经开始过时。

如今,JUNIT5已经迭代到5.8.x,Mockito也进入了4.0.0阶段,我们可以开始尝试基于JUNIT5+Mockito3来进行单测的开发。由于PowerMock在JUNIT5上无法工作,所以不再使用PowerMock。Mockito3.4后,已经支持mock静态方法(Mockito (Mockito 3.5.10 API) (javadoc.io)),不引入PowerMock也能继续单测开发。

二、Maven依赖

2.1 JUNIT5

首先引入JUNIT5。

            <!-- junit5 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version><scope>test</scope></dependency>

2.2 Mockito3

除了引入mockito-core外,还需要引入mockito-jupiter扩展包。

其中mockito-inline是对Mockito的增强,包括mock final类 static方法。

            <!-- mockito3 --><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><version>3.12.4</version><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><version>3.6.28</version><scope>test</scope></dependency><!-- mockito for junit5 --><dependency><groupId>org.mockito</groupId><artifactId>mockito-junit-jupiter</artifactId><version>2.23.0</version><scope>test</scope><exclusions><exclusion><artifactId>junit-jupiter-api</artifactId><groupId>org.junit.jupiter</groupId></exclusion></exclusions></dependency>

2.3 surefire

为了单测能正常运行并被mvn test识别,还需要更新maven-surefire-plugin,添加相关依赖。

            <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version><configuration><testFailureIgnore>true</testFailureIgnore></configuration><dependencies><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-surefire-provider</artifactId><version>1.2.0</version></dependency></dependencies></plugin>

三、UT示例

3.1 业务代码

@Service
public class DomainServiceImpl implements DomainService {@Resourceprivate DataJpa dataJpa;@Overridepublic Boolean foo(List<String> names) {int res = dataJpa.update(names);return res == 1;}
}

3.2 单元测试

在JUNIT5中,不再提供@RunWith注解,需要使用@ExtendWith注解。

为了让Mockito正常工作,需要在@ExtendWith注解中使用MockitoExtension.class

同时,@Before被@BeforeAll或者@BeforeEach替换,若使用@BeforeAll,需要写在静态方法上。

@ExtendWith(MockitoExtension.class)
class DomainServiceImplTest {@InjectMocksprivate DomainServiceImpl domainService;@Mockprivate DataJpa dataJpa;@BeforeAllstatic void setUp() {}@Testvoid foo() {List<String> names = Lists.newArrayList("a", "b");Mockito.when(dataJpa.update(Mockito.anyList())).thenReturn(1);boolean res = domainService.foo(names);Assertions.assertTrue(res);}
}

JUNIT5 + Mockito相关推荐

  1. Java单元测试框架与实践(Junit5 + Mockito)

    Java单元测试框架与实践 本文首先在理论上归纳了单元测试在宏观和微观层面要遵循的基本原则,以及测试覆盖率的要求和评价维度.然后具体阐述了笔者实战中总结的基于Junit + Mockito 的单元测试 ...

  2. Mockito verify Junit5集成 Mockito

    Mockito 集成 Junit5 在学习Mockito 如何集成 Junit5 之前,先来学习下 Mockito 基础的verify功能. Maven依赖 本篇博客代码的Maven依赖如下,源码地址 ...

  3. 单元测试实践思考(junit5+jmockit+testcontainer)

    文章目录 背景 方案设计 单元测试指导思想 单层隔离 内部穿透 技术实现 依赖管理 基础架构 封装Junit5&Jmockit 单元测试配置 TestContainer封装 官方方案 实际方案 ...

  4. Java之神:技能树(Skill Tree)

    ■■ 卷一:Java - 工程师修炼 ■□ Stage01:JavaSE ■ 零.Java预热 ● 计算机发展历史 ● 编程语言概况与分类 ● DOS常用命令 ● 学习方法与学习笔记及笔记工具 ● J ...

  5. junit5 mock静态方法 Mockito.mockStatic()

    junit5 mock静态方法 环境 jdk11 , junit5 ,springboot pom <dependency><groupId>org.springframewo ...

  6. springboot2+junit5+MockMvc(Mockito)实现对Controller的测试,配置都有,很详细了。

    背景: 今天偶然想测试下每个接口是否可以访问,网上找了一堆,基本没有一个在我的环境上实现了,没有一篇文章有详细的配置,于是只能用作参考自己进行琢磨,最后就出现了这样的文章也是给各位参考了,哈哈哈. 配 ...

  7. Mock工具之Mockito实战

    在实际项目中写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖项又会有依赖,导致在单元测试代码里几乎无法完成构建,尤其是当依赖项尚未构建完成时会导致单元测试无法进行.为了解决这类问题我们引入 ...

  8. SpringBoot Test及注解详解(含Mockito)

    一.版本差异 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,在 Spring Boot 2.2.0 版本之前,spring-boot-starter-test ...

  9. junit5和junit4_JUnit 5 –下一代JUnit的初步了解

    junit5和junit4 2月初, JUnit 5(又名JUnit Lambda)团队发布了一个alpha版本. 由于JUnit 4是我工具箱中使用最多的项目之一,因此我认为值得一看下一个主要版本. ...

  10. junit5和junit4_JUnit 5 –设置

    junit5和junit4 2015年11月, JUnit Lambda团队展示了他们的原型 . 此后,该项目更名为JUnit 5,并于2016年2月发布了Alpha版本.我们将在一系列简短文章中进行 ...

最新文章

  1. 魔术索引(返回索引值最小的一个)
  2. jQuery的无new构建
  3. reached getOption(max.print) -- omitted 428 rows ]
  4. 傲游浏览器记事本怎么打开
  5. 福州街头大红灯笼高高挂
  6. Shell脚本8种字符串截取方法总结
  7. webservice系列1---基于web工程上写一个基本数据类型的webservice
  8. 【转载】为什么要用黑莓?
  9. poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
  10. php snappy,php – 使用Knp Snappy生成pdf文件时出现错误字符
  11. VPX高速信号处理板设计资料第240篇:4C6678_K7_DDR3_VPX高速信号处理板
  12. UnityHub 无需登录 傻瓜教程 一键搞定
  13. web服务器推送技术
  14. 盒装Ubuntu着装绝妙,闪亮登场
  15. 如何将JPG转换为PNG?两种图片格式转换的方法交给你
  16. iQQ 学习笔记1 :登录、验证码、收消息
  17. 怎么攻击天猫商家 java,天猫店铺被恶意攻击,大家看看是怎么做的。
  18. <Zhuuu_ZZ>那些年我们踩过的Hadoop HA的坑--高可用集群
  19. win7 nvme 支持补丁_国产桌面版OS系统发布:Win7般体验 最高安全认证
  20. 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布 小程序趟过的坑,你遇到几个??

热门文章

  1. 大话设计模式之爱你一万年:第一章 设计模式基本概念:1.软件设计模式概述
  2. java开发微信公众号支付全流程
  3. linux qt触摸屏配置,QT触摸屏的实现
  4. java poi excel转pdf_java_poi导入导出excel.pdf
  5. windows 10下解压.gz后缀文件
  6. 图像辨识系统神经网络图,图像识别技术神经网络
  7. 基于SECS协议开发的简明教程(1)
  8. rmmod不能卸载驱动
  9. Excel单元格自定义格式的知识和技巧
  10. 硬盘坏了怎么修复 教你如何修复硬盘坏道