Skip to content

Recursive assertion hasNoNullFields throws NPE with fields of anonymous and local types #3534

@TheTribalK

Description

@TheTribalK

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();
	}

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions