v3.25.0
🚫 Deprecated
Core
- Deprecate the following date/time related assertions in favor of
isCloseTo
:isEqualToIgnoringHours
isEqualToIgnoringMinutes
isEqualToIgnoringSeconds
isEqualToIgnoringMillis
isEqualToIgnoringNanos
isInSameHourAs
isInSameMinuteAs
isInSameSecondAs
- Deprecate
asList
in favor ofasInstanceOf
#3138
✨ New Features
Core
-
Add
Descriptable#describedAs(Supplier<String>)
-
Add
isInThePast
andisInTheFuture
toLocalDate
assertions #2933 -
Add
isInThePast
andisInTheFuture
to the missing Java 8 date/time types #2947 -
Add
isRecord
andisNotRecord
toClass
assertions #2968 -
Add
hasNullValue
anddoesNotHaveNullValue
toAtomicReferenceAssert
#2969 -
Add
asBoolean|Byte|Short|Int|Long|Float|Double
toString
assertions #2580 -
Add
hasRecordComponents
toClass
assertions #2995 -
Add getters for field path in
ComparisonDifference
#3007 -
Allow to compare
enum
andstring
fields in the recursive comparison #2616 -
Provide value when
assertThatThrownBy
/thenThrownBy
fail #3043 -
Add
isSealed
andisNotSealed
toClass
assertions #3080 -
Add
assertThatCharSequence
to disambiguate Groovy'sGString
#3132 -
Change the way the properties are collected using the
Class.getMethods()
API instead of iterating the class hierarchy usingClass.declaredMethods()
#3135 -
Add default constructor for
RecursiveComparator
#3206 -
Add
isPrimitive
andisNotPrimitive
toClass
assertions #2722 -
Add
anyOf(ThrowingConsumer...)
andallOf(ThrowingConsumer...)
#3219Details
What was written as:
assertThat(elements) .extracting(Element::getProperty) .allSatisfy(p -> assertThat(p).satisfiesAnyOf( p1 -> assertThat(p1).isNull(), p1 -> assertThat(p1).isNotNull().extracting(Property::getId).isEqualTo(expected) ));
can now be shortened to:
assertThat(elements) .extracting(Element::getProperty) .allSatisfy(anyOf( // statically imported from Assertions p1 -> assertThat(p1).isNull(), p1 -> assertThat(p1).isNotNull().extracting(Property::getId).isEqualTo(expected) ));
-
Show the array/iterable under test in the assertion error message when it is not empty but should have been #3230
🐛 Bug Fixes
Core
- Compare Java types from
javax
andcom.sun
by their equals method in recursive comparison #2928 - The recursive comparison
comparingOnlyFields
did not treat array/iterable elements as root objects #2994 - Fixes a bug when failing assertions on
DirectoryStream
types #3036 - Fix handling of null containers in the recursive assertion #3045
- Handle null values in map entry sets when formatting #3087
- Fix NPE when expected and actual field values are null #3034
- Fix NPE on
anyMatch
whenactual
containsnull
andObjects::isNull
is used as predicate #3151 - Fix misleading subsequence failure messages in string assertions #3166
- Do not ignore nested fields of types specified in
comparingOnlyFieldsOfTypes
#3207 containsExactly
does not work properly with maps not using equals to compare keys #2165- Escape percentage in
shouldContainExactly
error message #3288 - Fix recursive comparison of ignored types in unordered collection #3287
⚡ Improvements
- Add Spotless #3115
Core
-
Use Bnd feature to write resolved
bndrun
files to output folder #2902 -
Add
Throwable
stack trace toShouldHaveClause
#2872 -
Avoid copy of any
Collection
instance inIterables::assertContains
-
Add
Throwable
stack trace toShouldHaveRootCauseInstance
andShouldHaveRootCauseExactlyInstance
#2910 -
Add missing description to nested condition #2755
-
Make nestable condition factory accept conditions on super types #2905
-
Add varargs overload to
Assert::hasString
andAssert::doesNotHaveString
#2945 -
Improve recursive comparison performance by caching field and field names result #2979
-
Document performance cost of ignoring collection order
-
Track visited values and their comparison differences so that they can be reused #2954
-
Use hash code for
compareUnorderedIterables
to improve performance in some common cases #3020 -
Improve recursive comparison error message regarding
equals
methods used for JDK types #2678 -
Format large arrays as strings #3065
-
Remove null check as
isArray
already performs it -
Fix
PrimitiveArralList
/TransformlingList
test file names #3124 -
Add exception for usages of
isEqualTo
andisNotEqualTo
on assertions #2921Details
Before this change, the following code:
AbstractAssert<?, ?> assertion = assertThat(something); assertThat(assertion).isEqualTo(assertion);
would throw an exception with a message about
equals
being unsupported, suggesting to useisEqualTo
instead. The message is somewhat confusing to the reader, sinceisEqualTo
is indeed used, and is becauseisEqualTo
internally relies on theequals
ofactual
, which is anAbstractAssert
instance and throws the exception above.isEqualTo
andisNotEqualTo
now check ifactual
is an assertion instance and raise anUnsupportedOperationException
if so, with a message suggesting to useisSameAs
andisNotSameAs
instead.This is, for example, useful for testing custom assertion types for extension libraries, where the use of
satisfies
instead ofisEqualTo
may be desirable. -
Add check for missing fields in recursive comparison where specific fields are requested for comparison
-
Improve efficiency of iterable string conversion #3123
-
Add more tests for
usingRecursiveComparison
#2790 -
Checks that compared fields exist before running the recursive comparison #3129
-
Remove
maven-surefire-plugin
duplicate version #3180 -
Remove Maven default goal #3182
-
Add dependency graph workflow
-
Normalize non-breaking spaces like regular white spaces #3120
-
AbstractOffsetDateTimeAssert::isBetween
parameter names should useinclusive
, notexclusive
#3217 -
Invoke
isNotNull
inreturns
anddoesNotReturn
#3224 -
Cache node names in
ComparingFields
,ComparingProperties
#3242 -
Cache node names in
ComparingNormalizedFields
-
Use simpler syntax in
DefaultRecursiveComparisonIntrospectionStrategy.getChildrenNodeNamesOf
-
Update to Contributor Covenant Code of Conduct v2.1
-
Correct
contains
assertion Javadoc to reflect method behavior in case actual is not empty and the group of values to look for is #3256 -
Fix Javadoc typos #3265
-
Improving null-safety of
isEqualToNormalizingNewlines
#2776 -
Speed up for
BinaryDiff
performance #3193 -
Upgrade workflows to Java 21 #3191
-
Apply
flatten-maven-plugin
toassertj-core
andassertj-guava
#3311
🔨 Dependency Upgrades
- Upgrade to Bnd 7.0.0 #3211
- Upgrade to Byte Buddy 1.14.11 #3304
- Upgrade to Commons IO 2.14.0 #3200
- Upgrade to Commons Lang 3.14.0 #3269
- Upgrade to EqualsVerifier 3.15.5 #3305
- Upgrade to Flatten Maven Plugin 1.5.0 #3041
- Upgrade to GMavenPlus Plugin 3.0.2 #3199
- Upgrade to Groovy 4.0.17 #3306
- Upgrade to Guava 32.1.3-jre #3218
- Upgrade to Hibernate Core 6.4.1.Final #3299
- Upgrade to Jackson Databind 2.16.0 #3258
- Upgrade to JaCoCo Maven Plugin 0.8.11
- Upgrade to Japicmp Maven Plugin 0.18.2 #3228
- Upgrade to Java Servlet API 4.0.1 #2934
- Upgrade to JBoss Logging 3.5.3.Final #3101
- Upgrade to JUnit BOM 5.10.1 #3254
- Upgrade to Kotlin 1.9.22 #3303
- Upgrade to License Maven Plugin 4.3 #3198
- Upgrade to Maven 3.9.6
- Upgrade to Maven Clean Plugin 3.3.2 #3240
- Upgrade to Maven Compiler Plugin 3.12.1 #3310
- Upgrade to Maven Deploy Plugin 3.1.1 #3001
- Upgrade to Maven Enforcer Plugin 3.4.1 #3172
- Upgrade to Maven GPG Plugin 3.1.0 #3040
- Upgrade to Maven Install Plugin 3.1.1 #2999
- Upgrade to Maven Javadoc Plugin 3.6.2 #3253
- Upgrade to Maven Project Info Reports Plugin 3.5.0 #3267
- Upgrade to Maven Release Plugin 3.0.1 #3068
- Upgrade to Maven Resources Plugin 3.3.1 #3000
- Upgrade to Maven Source Plugin 3.3.0 #3057
- Upgrade to Maven Surefire Plugin 3.2.2 #3252
- Upgrade to Maven Surefire Report Plugin 3.2.2 #3255
- Upgrade to OpenTest4J 1.3.0 #3122
- Upgrade to OSGi System Bundle 3.18.600 #3286
- Upgrade to PITest 1.1.2 #3163
- Upgrade to PITest JUnit 5 Plugin 1.2.1 #3236
- Upgrade to PITest Maven 1.15.2 #3237
- Upgrade to Sonar Maven Plugin 3.10.0.2594 #3178
- Upgrade to SpotBugs Maven Plugin 4.8.1.0 #3257
- Upgrade to Spotless Maven Plugin 2.41.1 #3285
- Upgrade to Spring Core 5.3.31 #3259
- Upgrade to TestNG 7.9.0 #3312
- Upgrade to Versions Maven Plugin 2.16.2 #3260
- Upgrade to actions/checkout 4 #3169
- Upgrade to actions/setup-java 4 #3279
- Upgrade to actions/upload-artifact 4 #3298
- Upgrade to dawidd6/action-download-artifact 3 #3296
❤️ Contributors
Thanks to all the contributors who worked on this release:
@bjhargrave @vlsi @Ds2994 @StefanBratanov @alex859 @ascopes @ljrmorgan @ghkim3221 @hezean @matthew-leng @etellman @hjir @amodolo @armandino @aindriu-aiven @Bananeweizen @JohnBryte @ManuelG28 @maximedezette @radistao @ykardziyaka @wouterpolet @sarajuhosova @pbacz @Gabriel-Darbord @Nacho321 @marcela-cardona-s @matthiaskraaz @quaff @grigala @martinfrancois @georgebax