-
-
Notifications
You must be signed in to change notification settings - Fork 749
Description
Description
When is use org.assertj.core.api.AbstractObjectAssert.usingRecursiveAssertion() on a Object which holds an Instance of a anonymous Type the assertion (e.g. org.assertj.core.api.RecursiveAssertionAssert.hasNoNullFields()) fails with a NPE.
java.lang.NullPointerException: Cannot invoke "String.startsWith(String)" because "canonicalName" is null
at org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.nodeIsJavaTypeToIgnore(RecursiveAssertionDriver.java:241)
at org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.shouldRecurseIntoNode(RecursiveAssertionDriver.java:236)
at org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.recurseIntoFieldsOfCurrentNode(RecursiveAssertionDriver.java:124)
at org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.assertRecursively(RecursiveAssertionDriver.java:74)
at org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.assertOverObjectGraph(RecursiveAssertionDriver.java:56)
at org.assertj.core.api.RecursiveAssertionAssert.allFieldsSatisfy(RecursiveAssertionAssert.java:120)
at org.assertj.core.api.RecursiveAssertionAssert.hasNoNullFields(RecursiveAssertionAssert.java:174)
at ---
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
The reason seems to be a missing null check in org.assertj.core.api.recursive.assertion.RecursiveAssertionDriver.nodeIsJavaTypeToIgnore.
- assertj core version: 3.25.3
- java version: 17
- test framework version: junit-jupiter-api-5.10.2
- os: not relevant
Test case reproducing the bug
@Test
public void test() {
interface I {
}
class O {
public I i;
}
O o = new O();
o.i = new I() {
};
assertThat(o)
.usingRecursiveAssertion()
.hasNoNullFields();
}