使用JUnit 5在Mockito中方便地进行模拟–官方方式

从版本2.17.0开始,如果使用JUnit 5, Mockito提供了官方(内置)支持来管理模拟生命周期。

入门

为了利用该集成,需要在JUnit 5的junit-platform-engine旁边添加Mockito的mockito-junit-jupiter依赖项(有关详细信息,请参见下文)。

之后, MockitoException为JUnit 5启用新的Mockito扩展MockitoException 。 这就足够了。 所有的Mockito注释都应自动开始工作。

import org.junit.jupiter.api.Test;  //do not confuse with 'org.junit.Test'!
//other imports
import org.mockito.junit.jupiter.MockitoExtension;@ExtendWith(MockitoExtension.class)
class SpaceShipJUnit5Test {@InjectMocksprivate SpaceShip spaceShip;@Mockprivate TacticalStation tacticalStation;@Mockprivate OperationsStation operationsStation;@Testvoid shouldInjectMocks() {assertThat(spaceShip).isNotNull();assertThat(tacticalStation).isNotNull();assertThat(operationsStation).isNotNull();assertThat(spaceShip.getTacticalStation()).isSameAs(tacticalStation);assertThat(spaceShip.getOperationsStation()).isSameAs(operationsStation);}
}

很好的是,测试类和测试方法都不再需要公开了。

请注意 。 在类路径上(例如,通过junit-vintage-engine )还具有JUnit 4来进行测试的“旧版”部分,因此不要将org.junit.jupiter.api.Test与旧的org.junit.Test混淆是很重要的。 不起作用。

存根和验证

如果由于某些原因您不喜欢AssertJ(尽管我鼓励您至少尝试一下),则JUnit 5提供了一个本地断言assertThrows (与AssertJ中的assertThatThrownBy()非常相似)。 在断言失败的情况下,它提供了有意义的错误消息。

@Test
void shouldMockSomething() {//givenwillThrow(SelfCheckException.class).given(tacticalStation).doSelfCheck();   //void method "given..will" not "when..then" cannot be used//whenExecutable e = () -> spaceShip.doSelfCheck();//thenassertThrows(SelfCheckException.class, e);
}

我不是我自己,如果我在这里不提及在AssertJ和嘲笑java8中可用的接口中利用对默认方法的支持,可以使很多静态导入变得多余。

@ExtendWith(MockitoExtension.class)
class SpaceShipJUnit5Test implements WithAssertions, WithBDDMockito {...
}

调整默认行为

还需要指出的是,默认情况下,使用JUnit 5扩展Mockito可以在“严格模式”下使用 。 这意味着,例如,不必要的存根将使测试失败。 虽然通常是代码气味,但在某些情况下需要测试构造。 要更改默认行为,可以使用@MockitoSettings批注。

@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.WARN)
class SpaceShipJUnitAdvTest implements WithAssertions, WithBDDMockito {....
}

依存关系

正如我已经提到的,要开始使用它,需要在JUnit 5的junit-platform-engine旁边添加Mockito的mockito-junit-jupiter依赖项。 在Gradle构建中,它可能类似于:

dependencies {testCompile 'org.junit.vintage:junit-platform-engine:5.1.0'testCompile 'org.mockito:mockito-junit-jupiter:2.17.2'  //mockito-core is implicitly addedtestCompile 'org.junit.vintage:junit-vintage-engine:5.1.0'  //for JUnit 4.12 test execution, if neededtestCompile 'org.assertj:assertj-core:3.9.1'    //if you like it (you should ;) )
}

请注意 。 由于我在写这篇博客文章时发现通过构造函数将模拟注入最终字段中的错误 ,因此建议至少使用2.17.2版本而不是2.17.0版本。 该“开发”版本在Maven Central中不可用,必须添加额外的Bintray存储库。

repositories {mavenCentral()maven { url "https://dl.bintray.com/mockito/maven" }    //for development versions of Mockito
}

另外,如果不对Gradle 4.6+中的 JUnit 5测试执行使用全新的本机支持,那将是一种浪费。

test {useJUnitPlatform()
}

自2016.2起,IntelliJ IDEA就提供了JUnit支持(当时的JUnit 5里程碑2)。 Eclipse Oxygen最近似乎也增加了对JUnit 5的支持 。

摘要

在Mockito中具有对JUnit 5的本机支持真的很好。 没有取得成功,仍在不断进行改进。
该功能由Christian Schwarz实现,并由Tim van der Lippe在其他一些人的大力协助下进行了完善。

源代码可从GitHub获得 。

翻译自: https://www.javacodegeeks.com/2018/03/convenient-mocking-in-mockito-with-junit-5-the-official-way.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

esp32搭建文件服务器,ESP32入门示例 - SD卡Web服务器

这个是来自ESP32官方示例的改版,官方的示例由于存在一些问题所以我进行了修改原本的示例有点逻辑上的问题,所以进行了一些修改主要修改有:1.新增SD卡测试部分 复制自官方SD卡示例2.新增一个根目录页,访问根目录就可以看到3.修改了…

mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置

一、 MySQLMyCat分库分表1 MyCat简介java编写的数据库中间件Mycat运行环境需要JDK。Mycat是中间件,运行在代码应用和MySQL数据库之间的应用。前身: corba,是阿里开发的数据库中间件,实现MySQL数据库分库分表集群管理的中间件&…

字符串String截取字符char

字符串类的charAt() 方法可返回指定位置的字符。 stringObject.charAt(index)从键盘输入获取了一个字符串,将其数据类型转换为字符型。 Scanner scan new Scanner(System.in); String str scan.next(); char ca str.charAt(0);示例: import java.u…

Java基本语法(14)--for循环结构

循环结构:在某些条件满足的情况下,反复执行特定代码的功能。 基本格式: for (①初始化部分; ②循环条件部分; ④迭代部分){ ③循环体部分; }如果①,④部分多条语句,语句之间用“,”…

Java 8中的功能接口是什么? @功能注释和示例

函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习lambda表达式和Stream API。除非您知道什么是功能接口以及lambda与它之间的关…

win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞

上次由于我SSD不够,所以我用虚拟硬盘的方式,虚拟了3个VHDX硬盘,组了个奇偶校验的存储池,并且简单的做了测试。测试结果是,组存储池确实提高了我们的数据安全性。WIN10存储池,可以让我们玩家省去组RAID&…

截止角频率和截止频率的关系_开关电源的控制环截止频率和开关频率有什么关系?...

【新朋友】点击上方蓝字“电源之家”关注【老朋友】点击右上角按钮,分享到朋友圈电源之家官方技术③群:522815202(3000人群)(电源行业第一大技术交流QQ群)这个问题很专业,因此答案注定也专业而非科普,非电力电子专业小伙伴看不懂很…

restlet_Restlet框架– Hello World示例

restletRestlet是用于Java平台的轻量级,全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输,数据格式和服务描述标准,例如HTTP和HTTPS,SMTP,XML,JSON,At…

在运行时在Spring Cloud Config中刷新属性配置

在本系列Spring Cloud Config的教程系列中,我们将讨论在运行时刷新属性配置的过程,我们将使用Spring Boot致动器/refresh端点进行/refresh 。 此外,我们还将研究使用RefreshScope注释刷新Value属性。 在我的Spring Cloud Config的上一教程中…

pythonnumpy教程_Python学习教程:通俗易懂的Numpy入门教程

Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pandas也是基于numpy构建的,机器学习包scikit-learn也大量使用了numpy方法。本文介绍了Numpy的n维数组在数据处理和分析的所有核心应用。目录如何构建numpy数组如何观察数…

css hack技巧_5种减少Hack的编码技巧

css hack技巧在本文中,我们将探讨五种方法,这些方法可以使用有效的编码来帮助垃圾回收器花费更少的CPU时间分配和释放内存,并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时停止(也称为“停止世界”)。 一些…

mysql数据库全备_MySQL innobackupex全备是指什么

MySQL innobackupex全备是指什么发布时间:2020-06-03 10:10:31来源:51CTO阅读:133作者:三月下文主要给大家带来MySQL innobackupex全备是指什么,希望这些内容能够带给大家实际用处,这也是我编辑MySQL innob…

数组初始化使用(写)new与不使用(不写)new

首先,数组初始化时,写不写new没有区别的。int arr[] new int[]{ 3, 9, 8};或者int[] arr {3,9,8};编译器遇到 int a[] {3, 8, 9}; 会编译成和 int a[] new int[] {3, 8, 9}; 完全一样的中间代码。 ①不同于String类。String由于实现了常量池&#xf…

Java数组(2)--一维数组

一、一维数组的(声明赋值)初始化 声明:type var[]; 或 type[] var;(示例:int[] age;) 初始化: ①动态初始化:声明且为数组元素分配空间,与赋值的操作分开进行 int[] ar…

Java数组(3)--二维(多维)数组

二维数组相当于一维数组的元素是一维数组 一、二维数组声明赋值初始化 动态初始化① int[][] arr new int[3][2];定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为…

workflow java_workflow java实现的activity工作流实例 Develop 238万源代码下载- www.pudn.com...

文件名称: workflow下载收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 134 KB上传时间: 2014-09-18下载次数: 3提 供 者: 张华详细说明:java实现的activity工作流实例 -java activity文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉)…

使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序SSO。 3个帖子是: 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring …

实现任意行数的杨辉三角

public class JavaTest {public static void main(String[] args) {//放置杨辉三角的数组&#xff0c;可通过更改new int[n][]中n的值以获取不同行数的杨辉三角int[][] yangItem new int[10][];//获取杨辉三角数组中每个元素的值for (int i 0;i < yangItem.length;i){//当…

java excel sheet页_Java导出Excel Sheet页

1、问题背景导出Excel表格时&#xff0c;首先要生成Sheet页&#xff0c;下面将介绍如何生成Sheet页2、实现源码/**** Project:* Title:ExcelExport.java* Package:report.utils* Description:* Author:YouHaiDong* Date:2015年11月2日 下午6:29:22* Version:*/package report.u…

鸿蒙与安卓系统简单对比,绝非追求三分天下。

鸿蒙是面向5G物联网、面向全场景的分布式操作系统&#xff0c;其不是安卓系统的分支或修改而来的&#xff0c;与安卓、iOS是不一样的操作系统。鸿蒙将打通手机、电脑、平板、电视、电器设备、工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统&#xff0c;并且…