Assertj-core: `isEqualToComparingFieldByFieldRecursively` throws NullPointerException while comparing null values

Created on 5 Jan 2018  路  7Comments  路  Source: assertj/assertj-core

Summary

If a nested field is null while comparing equality for two objects with isEqualToComparingFieldByFieldRecursively a NullPointerException is thrown.

Stacktrace

Exception in thread "main" java.lang.NullPointerException
    at org.assertj.core.error.ShouldBeEqualByComparingFieldByFieldRecursively.describeDifference(ShouldBeEqualByComparingFieldByFieldRecursively.java:67)
    at org.assertj.core.error.ShouldBeEqualByComparingFieldByFieldRecursively.shouldBeEqualByComparingFieldByFieldRecursive(ShouldBeEqualByComparingFieldByFieldRecursively.java:32)
    at org.assertj.core.internal.Objects.assertIsEqualToComparingFieldByFieldRecursively(Objects.java:728)
    at org.assertj.core.api.AbstractObjectAssert.isEqualToComparingFieldByFieldRecursively(AbstractObjectAssert.java:653)
...

Example

class Main {

    static class Value {
        private final String v;

        public Value(String v) {
            this.v = v;
        }
    }

    public static void main(String[] args) {
        Value actual = new Value(null); //swapping actual and expected leads to the same error
        Value expected = new Value("something");
        Assertions.assertThat(expected).isEqualToComparingFieldByFieldRecursively(actual);
    }

}

Java 8 specific ?

  • YES
    Tested with Version 3.9.0
bug

All 7 comments

Thanks for reporting this !

This is regression in version 2.9.0/3.9.0 introduced by https://github.com/joel-costigliola/assertj-core/commit/fb9f9522f7abe2d863af6aa760ec7e8162009f49

@hwielenberg As a workaround you can use 3.8.0

I could write the Bugfix if you want.
Should be straightforward.

Contributions welcome! 馃槂

I have a fix for this, will create pull request shortly.

backport to 2.x (fixed in 3.9.1)

created #1204 for branch 2.x

Was this page helpful?
0 / 5 - 0 ratings