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.

“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? 

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:
hasSuppresedException()
– hasNoSuppresedExceptions()

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.

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!

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?

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.

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.