[NEWS] AssertJ 3.6.X – Interview with Joel Costigliola – [新闻] AssertJ 3.6.X – 采访Joel Costigliola

最后修改: 2017年 3月 13日

1. Introduction


AssertJ is a library that provides fluent assertions for Java. You can read more about it here and here.


Recently, the 3.6.0 version was released along with two small bug-fix releases 3.6.1 and 3.6.2.


Today, Joel Costigliola – the creator of the library – is with us and will tell you a little bit more about the release and future plans.

今天,Joel Costigliola–该库的创建者–和我们在一起,将告诉你更多关于该版本和未来计划的信息。

“We are trying to make AssertJ really community-oriented”


2. Versions 2.6.0 and 3.6.0 Were Released Pretty Much at the Same Time. What Is the Difference Between Them?和3.6.0版本几乎是在同一时间发布的。它们之间的区别是什么?

2.x versions target Java 7 while 3.x target Java 8. Another way of seeing this is that 3.x = 2.x + Java 8 specific features.

3. What Are the Most Notable Changes/Additions That Appeared in 3.6.0/2.6.0?


2.6.0 ended up having different small features but no big additions. If I had to choose, the most interesting ones would be those related to suppresed exceptions:



3.6.0 additionally got a way of checking multiples assertions on array/iterable/map entry elements:

4. Since the Release of 3.6.0, Two Bugfix Releases Appeared (3.6.1, 3.6.2). Can You Tell Us a Little Bit More What Happened There and What Needed to Be Fixed?


In 3.6.1, filteredOn(Predicate) was only working with List but not Iterable, pretty bad.


In 3.6.2, we did not think of extracting properties from Java 8 default getter method, it turns out it did not work out of the box after some internal refactoring.

在3.6.2中,我们没有想到从Java 8默认的getter方法中提取属性,事实证明,经过一些内部重构后,它并没有开箱即用。

I asked users whether they could wait for the next release, the bug reporter told me he was ok to wait but another user wanted it so I released a new version. We are trying to make AssertJ really community-oriented, since cutting a release is cheap (well except the documentation part) I usually don’t see any problem releasing.


5. Did You Encounter Any Interesting Technical Challenges When Working on the Newest Release?


I will point a problem I have encountered working on the next release 3.7.0 that should be out in few weeks.


Java 8 is picky about “ambiguous” method signatures. We added a new assertThat method that takes a ThrowingCallable (a simple class that is a Callable throwing an exception), it turned out that Java 8 confuses it with another assertThat method that takes an Iterable!

Java 8对 “模糊的 “方法签名很挑剔。我们添加了一个新的 assertThat 方法,它需要一个 ThrowingCallable(一个简单的类,它是一个抛出异常的 Callable),结果发现 Java 8 把它和另一个需要一个 Iterable!assertThat 方法混淆了。

That was the most surprising to me as I don’t see any ambiguity between the two.


6. Are You Planning Any New Major Release Soon? Anything That Will Utilize Java 9 Additions?

6.你们是否计划在近期发布新的主要版本?任何将利用Java 9增加的内容吗?

In the next weeks / one month. We usually try to have releases every few months or when there are major additions.


Pascal Schumacher that has joined the AssertJ team has done some work on Java 9 to check compatibility, a few things don’t work, mainly the ones that rely on introspection since Java 9 changes the access rules. What we will do is start a 4.x branch that will be Java 9 focused, following the same strategy as 3.x vs 2.x, we will have 4.x = 3.x + Java 9 features.

加入AssertJ团队的Pascal Schumacher已经在Java 9上做了一些工作,以检查兼容性,有一些东西不工作了,主要是那些依赖于自省的东西,因为Java 9改变了访问规则。我们要做的是启动一个专注于Java 9的4.x分支,遵循3.x与2.x的相同策略,我们将有4.x=3.x+Java 9的功能。

Once 4.0 is officially released we will likely drop 2.x active development but keep accepting PRs as we do not have the capacity of maintaining 3 versions in sync, I mean by that we report any changes from n.x version to the n+1.x version, so adding something in 2.x would need to reported both in 3.x and 4.x and that is too much work at the moment.