Skip to content

v3.25.0

Compare
Choose a tag to compare
@scordio scordio released this 31 Dec 16:11
· 106 commits to main since this release

🚫 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 of asInstanceOf #3138

✨ New Features

Core

  • Add Descriptable#describedAs(Supplier<String>)

  • Add isInThePast and isInTheFuture to LocalDate assertions #2933

  • Add isInThePast and isInTheFuture to the missing Java 8 date/time types #2947

  • Add isRecord and isNotRecord to Class assertions #2968

  • Add hasNullValue and doesNotHaveNullValue to AtomicReferenceAssert #2969

  • Add asBoolean|Byte|Short|Int|Long|Float|Double to String assertions #2580

  • Add hasRecordComponents to Class assertions #2995

  • Add getters for field path in ComparisonDifference #3007

  • Allow to compare enum and string fields in the recursive comparison #2616

  • Provide value when assertThatThrownBy / thenThrownBy fail #3043

  • Add isSealed and isNotSealed to Class assertions #3080

  • Add assertThatCharSequence to disambiguate Groovy's GString #3132

  • Change the way the properties are collected using the Class.getMethods() API instead of iterating the class hierarchy using Class.declaredMethods() #3135

  • Add default constructor for RecursiveComparator #3206

  • Add isPrimitive and isNotPrimitive to Class assertions #2722

  • Add anyOf(ThrowingConsumer...) and allOf(ThrowingConsumer...) #3219

    Details

    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 and com.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 when actual contains null and Objects::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

Core

  • Use Bnd feature to write resolved bndrun files to output folder #2902

  • Add Throwable stack trace to ShouldHaveClause #2872

  • Avoid copy of any Collection instance in Iterables::assertContains

  • Add Throwable stack trace to ShouldHaveRootCauseInstance and ShouldHaveRootCauseExactlyInstance #2910

  • Add missing description to nested condition #2755

  • Make nestable condition factory accept conditions on super types #2905

  • Add varargs overload to Assert::hasString and Assert::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 and isNotEqualTo on assertions #2921

    Details

    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 use isEqualTo instead. The message is somewhat confusing to the reader, since isEqualTo is indeed used, and is because isEqualTo internally relies on the equals of actual, which is an AbstractAssert instance and throws the exception above.

    isEqualTo and isNotEqualTo now check if actual is an assertion instance and raise an UnsupportedOperationException if so, with a message suggesting to use isSameAs and isNotSameAs instead.

    This is, for example, useful for testing custom assertion types for extension libraries, where the use of satisfies instead of isEqualTo 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 use inclusive, not exclusive #3217

  • Invoke isNotNull in returns and doesNotReturn #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 to assertj-core and assertj-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