Search in sources :

Example 1 with OngoingStubbingImpl

use of org.mockito.internal.stubbing.OngoingStubbingImpl in project mockito by mockito.

the class MockHandlerImpl method handle.

public Object handle(Invocation invocation) throws Throwable {
    if (invocationContainerImpl.hasAnswersForStubbing()) {
        // stubbing voids with doThrow() or doAnswer() style
        InvocationMatcher invocationMatcher = matchersBinder.bindMatchers(mockingProgress().getArgumentMatcherStorage(), invocation);
        invocationContainerImpl.setMethodForStubbing(invocationMatcher);
        return null;
    }
    VerificationMode verificationMode = mockingProgress().pullVerificationMode();
    InvocationMatcher invocationMatcher = matchersBinder.bindMatchers(mockingProgress().getArgumentMatcherStorage(), invocation);
    mockingProgress().validateState();
    // if verificationMode is not null then someone is doing verify()
    if (verificationMode != null) {
        // - see VerifyingWithAnExtraCallToADifferentMockTest (bug 138)
        if (((MockAwareVerificationMode) verificationMode).getMock() == invocation.getMock()) {
            VerificationDataImpl data = createVerificationData(invocationContainerImpl, invocationMatcher);
            verificationMode.verify(data);
            return null;
        } else {
            // this means there is an invocation on a different mock. Re-adding verification mode
            // - see VerifyingWithAnExtraCallToADifferentMockTest (bug 138)
            mockingProgress().verificationStarted(verificationMode);
        }
    }
    // prepare invocation for stubbing
    invocationContainerImpl.setInvocationForPotentialStubbing(invocationMatcher);
    OngoingStubbingImpl<T> ongoingStubbing = new OngoingStubbingImpl<T>(invocationContainerImpl);
    mockingProgress().reportOngoingStubbing(ongoingStubbing);
    // look for existing answer for this invocation
    StubbedInvocationMatcher stubbedInvocation = invocationContainerImpl.findAnswerFor(invocation);
    notifyStubbedAnswerLookup(invocation, stubbedInvocation);
    if (stubbedInvocation != null) {
        stubbedInvocation.captureArgumentsFrom(invocation);
        return stubbedInvocation.answer(invocation);
    } else {
        Object ret = mockSettings.getDefaultAnswer().answer(invocation);
        DefaultAnswerValidator.validateReturnValueFor(invocation, ret);
        // redo setting invocation for potential stubbing in case of partial
        // mocks / spies.
        // Without it, the real method inside 'when' might have delegated
        // to other self method and overwrite the intended stubbed method
        // with a different one. The reset is required to avoid runtime exception that validates return type with stubbed method signature.
        invocationContainerImpl.resetInvocationForPotentialStubbing(invocationMatcher);
        return ret;
    }
}
Also used : VerificationDataImpl(org.mockito.internal.verification.VerificationDataImpl) StubbedInvocationMatcher(org.mockito.internal.stubbing.StubbedInvocationMatcher) OngoingStubbingImpl(org.mockito.internal.stubbing.OngoingStubbingImpl) InvocationMatcher(org.mockito.internal.invocation.InvocationMatcher) StubbedInvocationMatcher(org.mockito.internal.stubbing.StubbedInvocationMatcher) MockAwareVerificationMode(org.mockito.internal.verification.MockAwareVerificationMode) VerificationMode(org.mockito.verification.VerificationMode)

Example 2 with OngoingStubbingImpl

use of org.mockito.internal.stubbing.OngoingStubbingImpl in project mockito by mockito.

the class MockitoCore method getLastInvocation.

/**
     * For testing purposes only. Is not the part of main API.
     *
     * @return last invocation
     */
public Invocation getLastInvocation() {
    OngoingStubbingImpl ongoingStubbing = ((OngoingStubbingImpl) mockingProgress().pullOngoingStubbing());
    List<Invocation> allInvocations = ongoingStubbing.getRegisteredInvocations();
    return allInvocations.get(allInvocations.size() - 1);
}
Also used : Invocation(org.mockito.invocation.Invocation) Reporter.missingMethodInvocation(org.mockito.internal.exceptions.Reporter.missingMethodInvocation) OngoingStubbingImpl(org.mockito.internal.stubbing.OngoingStubbingImpl)

Aggregations

OngoingStubbingImpl (org.mockito.internal.stubbing.OngoingStubbingImpl)2 Reporter.missingMethodInvocation (org.mockito.internal.exceptions.Reporter.missingMethodInvocation)1 InvocationMatcher (org.mockito.internal.invocation.InvocationMatcher)1 StubbedInvocationMatcher (org.mockito.internal.stubbing.StubbedInvocationMatcher)1 MockAwareVerificationMode (org.mockito.internal.verification.MockAwareVerificationMode)1 VerificationDataImpl (org.mockito.internal.verification.VerificationDataImpl)1 Invocation (org.mockito.invocation.Invocation)1 VerificationMode (org.mockito.verification.VerificationMode)1