Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    Sponsor
    SponsoredKunjungi sekarang
    Promo