一、前言
JDK8开始引入了流的概念,这种方式使得程序更加具有连贯性,通俗易懂。JUnit与Hamcrest结合,功能上虽然很强大了,但也有局限性。流式断言器AssertJ就对其进行了拓展,所谓的流式断言就是相较于Assert的单个校验点断言,支持一条断言语句对实际值同时断言多个校验点。
- AssertJ官方地址:http://joel-costigliola.github.io/assertj/
- AssertJ开源地址:https://github.com/joel-costigliola/assertj-core
AssertJ核心是一个Java库,它提供了流接口【fluent interface】来编写断言。其主要目标是提高测试代码的可读性,使测试维护更容易。
AssertJ核心为JDK标准类型提供断言,并且可以与JUnit,TestNG或者其他任何测试框架一起使用。
不同的AssertJ主要版本依赖于不同的Java版本:
- AssertJ 3.x requires Java 8 or higher
- AssertJ 2.x requires Java 7 or higher
- AssertJ 1.x requires Java 6 or higher
注意,AssertJ3.x包含所有AssertJ2.x特性,并添加了Java 8的特定特性(比如 exception assertions with lambdas)。
Maven依赖:
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 2.9.1 for Java 7 projects -->
<version>3.11.0</version>
<scope>test</scope>
</dependency>
Gradle依赖:
testCompile("org.assertj:assertj-core:3.11.0")
二、AssertJ断言
AssertJ使用起来非常简单,只需静态导入Assertions类即可import static org.assertj.core.api.Assertions.*; 。当然我们也可以单独导入Assertions类中的方法,如下:
import static org.assertj.core.api.Assertions.assertThat; // main one
import static org.assertj.core.api.Assertions.atIndex; // for List assertions
import static org.assertj.core.api.Assertions.entry; // for Map assertions
import static org.assertj.core.api.Assertions.tuple; // when extracting several properties at once
import static org.assertj.core.api.Assertions.fail; // use when writing exception tests
import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; // idem
import static org.assertj.core.api.Assertions.filter; // for Iterable/Array assertions
import static org.assertj.core.api.Assertions.offset; // for floating number assertions
import static org.assertj.core.api.Assertions.anyOf; // use with Condition
import static org.assertj.core.api.Assertions.contentOf; // use with File assertions
《功能很强大,太过复杂,还没有总结出一个关于流这方面的整理思路,待后期完善》
参考资料:
- 流式断言器AssertJ入门介绍
- 断言神器AssertJ快速入门
- AssertJ的介绍
- AssertJ的介绍
- AssertJ简介