Skip to content

MockitoMockMaker throws NPE on null object #2337

@AndreasTu

Description

@AndreasTu

MockitoMockMaker throws NPE, whne try to check for a mock on a null object.

class TestSpec extends Specification {

  interface Parent {
    Child getChild()
  }

  interface Child {
    String getName()
  }

  def "NPE when stubbing method on null returned from unstubbed mock chain"() {
    given:
    def parent = Mock(Parent)
    // parent.getChild() is not stubbed, so it returns null
    def child = parent.getChild()

    when:
    // This line triggers the bug:
    // Spock 2.4 stable calls asMockOrNull(child) where child is null,
    // MockitoMockMaker passes null to Mockito's getHandler(), NPE
    child.getName() >> "Alice"

    then:
    true
  }
}

It throws:

java.lang.NullPointerException
	at org.mockito.internal.util.concurrent.WeakConcurrentMap.get(WeakConcurrentMap.java:57)
	at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.getHandler(InlineDelegateByteBuddyMockMaker.java:522)
	at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.getHandler(InlineByteBuddyMockMaker.java:67)
	at org.spockframework.mock.runtime.mockito.MockitoMockMakerImpl.asMockOrNull(MockitoMockMakerImpl.java:91)
	at org.spockframework.mock.runtime.mockito.MockitoMockMaker.asMockOrNull(MockitoMockMaker.java:78)
	at org.spockframework.mock.runtime.MockMakerRegistry.asMockOrNull(MockMakerRegistry.java:194)
	at org.spockframework.mock.MockUtil.asMockOrNull(MockUtil.java:85)
	at org.spockframework.mock.constraint.TargetConstraint.setInteraction(TargetConstraint.java:54)
	at org.spockframework.mock.runtime.MockInteraction.<init>(MockInteraction.java:63)
	at org.spockframework.mock.runtime.InteractionBuilder.build(InteractionBuilder.java:187)
	at org.spockframework.mock.TestSpec.NPE when stubbing method on null returned from unstubbed mock chain(TestSpec.groovy:42)

Discussed in #2336

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions