tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

tdd java

使用类似于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生成测试时才使用Idea。 对于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

tdd java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值