软件自动化测试

断言01-Hamcrest与AsserJ比较

2018-08-12  本文已影响9人  antony已经被占用

本文将简要介绍Junit原生、Hamcrest、以及AssertJ这三个不同时代的经典断言工具。这三个工具可以在不同类型的测试中使用。另外,很多专用自动化测试工具,如RestAssrured等也倾向于自带断言。在了解了经典断言工具后,对于了解这些专用工具自带的断言也更有益处。

Hamcrest

Hamcrest 属于”新一代”的断言工具,Hamcrest这个单词是”matchers”的变位词。它提供了大量丰富的匹配器,能够让断言可读性更高,断言样板代码量更小,更易维护。Hamcrest一经问世,就取得了非常大的成功,甚至一度成为第一个被Junit引入的第三方包,成为Junit4断言的一部分[1]。另外,Hamcrest也开发出了其他语言的版本,如C++, C#, Objective-C, Python, ActionScript 3, PHP, JavaScript, Erlang, and R。

当然,由于以AssertJ为代表的“新新一代”断言工具的出现以及蓬勃发展,Hamcrest又被移除出了Junit5[2], 让测试框架的使用者们可以更加自由的选择断言工具,促进Junit生态圈的发展。

AssertJ

AssertJ与之前的断言工具的最大不同,是引入了流式断言(Fluent Assertion),让断言的编写更加流畅,可读性更强,从而让它大获成功。它甚至还提供了一键转换的工具,将传统的Junit Assert断言转换为AsserJ断言。

Hamcrest与AssertJ比较

热度

首先来比较一下Hamcrest和AssertJ的热度。

【。。。待翻墙。。。】

image001.png

Hamcrest在2007年7月首次登陆Maven中央库,最近一次更新则在2012年7月,而AssertJ则在2013年登陆Maven中央库,截至本文写成的2018年8月,当年度已经发布3次。两者均录得了累计超过4000个项目的引用,在Maven中央库的历史排名均处于40位之内,属于明星项目。顺便说一下,Junit以超过7万个项目的引用成为最受欢迎的项目,而TestNG则以6000多次的引用排在20多位,两者差距非常明显[3]。

简要比较

以下是笔者整理的Junit Assert、Hamcrest以及AsserJ的简要比较。

断言工具 断言种类 断言语法 断言类数量 IDE自动提示 软断言及行为
Junit Assert 一般 对象比较 一个 方便 Assume,预期不符合则用例跳过
Hamcrest 丰富 对象比较 多个断言类 不方便 借助于Assume,行为同上。
AssetJ 丰富 流式断言 一个 方便 SoftAssertions,预期不符合继续执行,待执行完毕后用例失败

关于AsserJ的具体使用,可以参考其官方提供的项目

https://github.com/joel-costigliola/assertj-examples

1 Marc Philipp (21 Oct 2012). "Summary of Changes in version 4.4". JUnit documentation. Retrieved 20 Sep 2016.

https://github.com/junit-team/junit4/blob/master/doc/ReleaseNotes4.4.md#summary-of-changes-in-version-44

2(https://en.wikipedia.org/wiki/Hamcrest#cite_ref-3) "JUnit 5 User Guide - Third-party Assertion Libraries". Retrieved 11 May 2018. https://junit.org/junit5/docs/5.0.0/user-guide/#writing-tests-assertions-third-party

3 http://mvnrepository.com/popular

4 https://joel-costigliola.github.io/assertj/assertj-core-converting-junit-assertions-to-assertj.html

上一篇下一篇

猜你喜欢

热点阅读