适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
使用类似BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板。
本文涵盖的主题似乎很简单。 但是,根据我的培训师经验,我知道(不幸的是)这不是常见的做法。 因此,我决定写这篇简短的博客文章来传播它们,并在将来能够引用它。
我最喜欢的Java(和Groovy)测试框架是Spock 。 但是,它的模拟不适用于某些目的,我仍然在各种地方使用Mockito。 此外,我仍然针对已经在该堆栈中具有测试套件并且希望在不更改已知技术的情况下提高其技能的团队,在JUnit / Mockito / AssertJ变体中进行很多测试培训 。 因此,作为一个插曲,此博客文章介绍了纯Java风格的测试,并假设您已经在使用Mockito和AssertJ(如果在其他情况下,请尝试一下),则建议如何调整JUnit测试框架。
此博客文章由树部分组成。 首先,我提出了一种BDD样式的基于节的测试结构,以使您的测试更一致,更易读。 接下来,我将说明如何使用Java 8使用AssertJ和Mockito进行简化。最后但并非最不重要的一点是,我将展示如何在IntelliJ IDEA中将其配置为默认的JUnit测试(类)模板(这并不简单)这应该)。
第1部分。BDD样式的部分
编写良好的单元测试应满足几个要求(但这是单独发布的主题)。 有用的做法之一是将3个代码块明确划分为具有明确定义的职责。 您可以在我以前的博客文章中阅读有关该主题的更多信息 。
作为重复,仅以简短形式列出了核心规则:
given
–测试中的对象初始化+存根/模拟的创建,存根和注入when
–在给定测试中进行测试的操作then
–收到结果声明+模拟验证(如果需要)
@Test
public void shouldXXX() {//given...//when...//then...
}
这种分离有助于保持测试的简短性,并将重点放在测试的一项责任上(最终这只是一个单元测试)。
在Spock中,这些部分是必填(*)–没有它们,测试甚至无法编译。 在JUnit中只有注释。 但是,将它们放置在适当位置会鼓励人们使用它们,而不是在内部放置一大堆混乱(对于在测试区域中的新手尤其有用)。
顺便说一句,提到的“先给后定”约定基于更广泛的“ 行为驱动开发”概念(是其子集)。 您可能会在3个代码块上遇到类似的划分,这些代码块称为ranging-act-assert,通常等效。
第2部分。AssertJ和Mockito的Java 8
Java 8的功能之一是能够将默认方法放入接口中。 这可以用来简化对静态方法的调用,这在测试框架(如AssertJ和Mockito)中很普遍。 这个想法很简单。 愿意使用给定框架的测试类可以实现专用接口,以在IDE中完成代码时将这些方法“视为”它们自己的方法(而不是外部类的静态方法,这些方法要求在输入类名之前或静态导入) 。 那些默认方法只是将执行委托给静态方法。 您可以在我的其他博客文章中了解更多信息 。
AssertJ本机支持从3.0.0版本开始的那些构造。 Mockito 1.10和2.x与Java 6兼容,因此需要使用一个第三方项目– mockito-java8 (一旦可用,应将其集成到Mockito 3中)。
为了从Idea中更轻松的方法完成中受益,实现两个接口就足够了:
import info.solidsoft.mockito.java8.api.WithBDDMockito;
import org.assertj.core.api.WithAssertions;class SampleTest implements WithAssertions, WithBDDMockito {}
第3部分。Idea中的默认模板
我是无所不在的自动化的狂热爱好者。 在测试类中同时自动设置“先给定”部分和额外的接口,这不是很好吗? 让我们从生活中消除那些无聊的事情。
测试方法
更改JUnit测试方法很容易。 一种可能的方式是“ CTRL-SHIFT-A->文件模板->代码”,并将JUnit4 Test Method
修改为:
@org.junit.Test
public void should${NAME}() {//given${BODY}//when//then
}
要在现有测试类中添加新测试,只需按ALT-INSERT
并选择(或键入) JUnit4 Test Method
。
测试班
在整个测试课程中,情况要复杂一些。 Idea提供了一种编辑现有模板的方法,但是,仅当使用生产类中的CTRL-SHIFT-T
生成测试时才使用该方法。 对于TDD,首先要创建一个测试不是很方便。 如果在测试上下文中的程序包视图中按了ALT-INSERT
则最好在“ Java类”旁边显示一个新位置“ New JUnit测试类”。 不幸的是,要做到这一点,就需要编写一个新插件(Spock的示例实现 )。 作为解决方法,我们可以定义一个常规文件模板(作为限制),该模板可在任何地方(例如,即使在资源目录中)访问。
执行“ CTRL-SHIFT-A->文件模板->文件”,按INSERT
,将模板命名为“具有AssertJ和Mockito Test的JUnit”,将扩展名设置为“ java”,然后粘贴以下模板:
package ${PACKAGE_NAME};import info.solidsoft.mockito.java8.api.WithBDDMockito;
import org.assertj.core.api.WithAssertions;#parse("File Header.java")
public class ${NAME} implements WithAssertions, WithBDDMockito {}
展示柜
我们已经准备好了。 让我们检查一下它在实际中的外观(单击以放大动画)。
摘要
我希望我说服您调整测试模板以提高测试的可读性并确保每个测试几次击键。 在这种情况下,请立即花费4分钟在您的Idea中对其进行配置。 根据编写的许多测试,它可能会比您期望的更快开始回报:)。
顺便说一句,十月初,我将在克拉科夫的JDD 上介绍 Mockito 2的新功能。
自我提升 。 您想快速有效地提高您和您的团队的测试技能以及对Spock / JUnit / Mockito / AssertJ的了解吗? 我进行了浓缩(单元) 测试培训 ,您可能会觉得有用。
翻译自: https://www.javacodegeeks.com/2017/09/modern-tdd-oriented-java-8-junit-test-template-idea-mockito-assertj.html
适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)相关推荐
- tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
tdd java 使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的) ...
- [Java基础]Junit测试
Junit测试: 代码如下: package CalculatorPack;public class Calculator {public int add(int a,int b){return a+ ...
- Java之Junit测试框架
一.Junit 是什么? JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JU ...
- java 计算器 junit测试_Java中Junit4测试实例
Junit简介 JUnit: JUnit是一个Java语言的单元测试框架. 单元测试:单元测试的目的不是证明你的程序是正确的,而是证明你的程序没有错误 目前流行的版本3.8和4.0 Junit3.X: ...
- java 计算器 junit测试_Java Junit测试
使用junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大. 1.Junit简介: Junit最初是由Erich Gamma 和 Kent Beck 编写的一个回 ...
- Java使用Junit测试控制台输出
环境:Junit4.12 //定义打印输出流(PrintStream console).输出字节流数组 bytesPrintStream console = null;ByteArrayOutputS ...
- 使用μJava进行变异体测试
一.环境配置 mujava运行的是Java程序,Java的环境配置见Eclipse+JDK配置那点事. 将下载的mujava相关文件放到一个文件夹,文件夹放到C:\muJava 添加mujava环境变 ...
- java 扫描文件测试_适用于Java开发人员的微服务:安全测试和扫描
java 扫描文件测试 1.简介 本教程的这一部分专门讨论安全性测试,将围绕被证明在软件开发领域(包括微服务 )中无价的测试策略进行总结. 尽管软件项目中的安全方面每天都变得越来越重要,但是令人惊讶的 ...
- Java XMPP负载测试工具
在本文中,我们将开发用Java编写的XMPP负载测试工具. 目录 1.简介 2. XMPP负载测试工具 3.先决条件 4. LoadXmppTest Java程序 4.1. 创建一个新的Maven项目 ...
最新文章
- Oracle专家调优秘密
- oracle 12c chad,ORACLE 12.2RAC之问题 ora.chad OFFLINE
- Go语言与数据库开发:01-11
- C#LeetCode刷题之#705-设计哈希集合​​​​​​​(Design HashSet)
- selenium模拟登录豆瓣和qq空间
- Google正在失去DeepMind?
- An Overview of MITRE Cyber Situational Awareness Solutions
- 让人头疼的吃鸡外挂,一起来逆向分析一波
- Android开发入门教程1-开发环境的搭建
- 如何实现罗克韦尔PLC的模拟量采集和远程上下载?
- 北大青鸟消防控制器组网_北大青鸟JBF-61S20防火门监控报警主机使用说明书
- 搭建自己的github.io博客
- html浮动之后怎么隐藏,div浮动之后排在一行,在把浮动去掉,把div用display设置成inline-block之后就不...
- 【哈佛学习力6:学习生活化】
- 电子电路中电容的作用
- Highcharts Gantt JS 现代 Web 开发的甘特图
- postgresql创建数据库
- Win11不会弹出外置硬盘怎么办?
- 真实分享记录我学习Linux系统遇到的问题
- python换行符使用_python正则符号,详细的换行符和制表符用法,超实用