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

junit 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 4(例如,通过junit-vintage-engine )进行测试的“旧版”部分,不要将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

junit mockito

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

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

相关文章

正则表达式中的量词(限定符)含义的准确理解

量词准确理解?前面的元素(pattern/子表达式)匹配 0 次或者 1 次;出现 0 次或者 1 次。“次”改成“个”也行*前面的元素匹配大于等于 0 个前面的元素匹配大于等于 1 个{5}前面的元素匹配 5 个{2,6}前面的元素匹配 2 个到 6 个

docker初识_初识 docker 搭建自己的开发环境

换了一台设备,程序猿嘛第一件事肯定是先把开发环境搭建起来,以前为了方便都是搞的集成环境,这次准备下载集成环境的时候,突然想起 docker 这个东西,在下虽然了解一些概念性的东西但一直为曾实践。人嘛,没有…

PyTorch中使用指定的GPU

PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。 有如下两种方法来指定需要使用的GPU。 1.类似tensorflow指定GPU的方式,使用CUDA_VISIBLE_DEVICES。 1.1 直接终端中设定: CUDA_VISIBLE_DEVICES1 python…

jvm运行时类加载机制_JVM体系结构:JVM类加载器和运行时数据区

jvm运行时类加载机制各位读者好! 在JVM系列的上一篇文章中,开发人员了解了Java虚拟机(JVM)及其体系结构。 本教程将帮助开发人员正确回答以下主题的问题: ClassLoader子系统 运行时数据区 1.简介 在继续之前&#x…

括号的分类

括号名称符号小括号(parentheses,又称圆括号、括弧)( )中括号(square brackets,又称方括号)[ ]大括号(curly brackets, 又称花括号){ }六角括号〔 〕,中文才有…

python读取和存入json文件

将内容存入json文件 import json filename"C:/Users/13451/Desktop/captions_train.json" with open(filename, w) as j: json.dump(word_map, j)读取json文件中的内容 import json with open(filename,r) as f:x json.load(f) print(x)其中open函数的第二个参数&…

android 前台服务自定义布局不显示_Android前台服务通知未显示

我正在尝试启动前台服务.我收到通知,该服务确实启动但通知始终被抑制.我仔细检查了应用是否允许在我的设备上的应用信息中显示通知.这是我的代码:private void showNotification() {Intent notificationIntent new Intent(this, MainActivity.class);notificationI…

java技术专家学习路线图_向Java最佳专家的全球专家学习Java

java技术专家学习路线图Java with the Best Virtual Conference是您学习微服务,Java 9,Kubernetes以及其他Java的指南! 将于4月17日至18日收听,收听来自Pivotal,RedHat,Microsoft,Oracle和Netfl…

vim 编程常用的指令和快捷键

文章目录移动光标修改、剪切或复制配对符之间的内容ctagscscopegtags编译快速修改窗口自动补全多行缩进缩出折叠移动光标 命令说明gd跳转到局部变量的定义处gD跳转到全局变量的定义处,从当前文件开头开始搜索g;上一个修改过的地方g,下一个修改过的地方[[跳转到上一…

css 获取屏幕宽度_设备像素、设备独立像素、CSS像素、分辨率、PPI、devicePixelRatio 的区别...

设备像素 (device pixels)也称为物理像素,显示器的最小物理单位。这里需要注意,一个像素并不一定是一个小正方形区块,也没有标准的宽高,只是用于显示丰富色彩的一个“点”而已。可以参考公园里的景观变色彩灯,一个彩灯…

shell 脚本中特殊变量

特殊变量含义$0这个程式的执行名字$n这个程式的第n个参数值,n1…9$*这个程式的所有参数$#这个程式的参数个数$$这个程式的PID(脚本运行的当前进程ID号)$!执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)$?…

netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序

netbeans调试使用NetBeans的Java EE开发人员习惯于直接在NetBeans所选择的应用程序服务器中运行和调试其瘦战应用程序。 在开发打包为ber或镂空jars的微服务时,您期望使用相同的轻松方式进行运行和调试。 好消息是您可以。 在本文中,我将逐步介绍如何在N…

怎么更换默认路径_更改电脑桌面路径

电脑默认的桌面路径一般都在C盘,而我们又特别喜欢把文件都放在桌面,因为桌面既方便又好找。可时间久了,桌面文件会越来越多,C盘空间会越来越小,会拖慢系统速度。怎么把系统桌面路径设置在非C盘呢?本期教程将为大家讲解…

Linux 命令之 wc -- 统计文件中的字节数、字数、行数

文章目录命令介绍选项参数示例(一)统计当前目录下的所有文件的行数(二)统计当前目录下的文件总数(三)显示某个文件的行数(四)显示某个文件的行数、单词数、字节数(五&…

JSON合并补丁程序:JSON-P 1.1概述系列

Java EE 8包括对JSON处理API的更新,并使其与JSON的最新IEFT标准保持同步。 他们是: JSON指针 RFC 6901 JSON补丁 RFC 6902 JSON合并修补程序 RFC 7396 我将在这个迷你系列中涵盖这些主题。 入门 要开始使用JSON-P,您将需要Maven中央存储…

连接相机无法识别_春节用相机拍照,如何快速发朋友圈?

春节期间很多人都会用相机拍照相机照片在画质上有优势但分享比较麻烦如何快速发朋友圈?最快最方便的方式还是试用U盘直接把存储卡的照片拷贝到手机上操作简单方便,下面提供几种方式下面的读卡器推荐每款实用对象不一样,在选择时,根…

Linux 命令之 sh -- Shell 命令语言解释器

文章目录一、命令介绍二、选项参数三、命令示例(一)命令从字符串中读取一、命令介绍 sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。通过用户输入命令,和内核进行沟通! Bourne Again Shel…

oidc auth2.0_使用Spring Security 5.0和OIDC轻松构建身份验证

oidc auth2.0“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制…

Linux 命令之 xargs -- 给其他命令传递参数的一个过滤器

文章目录一、命令介绍二、选项参数三、命令示例(一)批量重命名目录中的文件(二)给多个命令传递参数一、命令介绍 xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成…

40无法u盘启动_戴尔主板bios设置u盘启动 戴尔台式电脑如何bios设置U盘启动教程...

戴尔dell作为电脑十大品牌,开创于1984年美国,以生产/设计/销售家用及办公室电脑而闻名,随着使用戴尔电脑的用户越来越多,在使用过程中可能会遇到系统被错误操作或者是内部组件损坏导致无法正常使用的情况。对于这种问题我们可以使…