Search in sources :

Example 1 with MockAwareVerificationMode

use of org.mockito.internal.verification.MockAwareVerificationMode 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 MockAwareVerificationMode

use of org.mockito.internal.verification.MockAwareVerificationMode in project mockito by mockito.

the class MockitoCore method verify.

public <T> T verify(T mock, VerificationMode mode) {
    if (mock == null) {
        throw nullPassedToVerify();
    }
    if (!isMock(mock)) {
        throw notAMockPassedToVerify(mock.getClass());
    }
    MockingProgress mockingProgress = mockingProgress();
    VerificationMode actualMode = mockingProgress.maybeVerifyLazily(mode);
    mockingProgress.verificationStarted(new MockAwareVerificationMode(mock, actualMode, mockingProgress.verificationListeners()));
    return mock;
}
Also used : MockAwareVerificationMode(org.mockito.internal.verification.MockAwareVerificationMode) MockingProgress(org.mockito.internal.progress.MockingProgress) MockAwareVerificationMode(org.mockito.internal.verification.MockAwareVerificationMode) VerificationMode(org.mockito.verification.VerificationMode)

Aggregations

MockAwareVerificationMode (org.mockito.internal.verification.MockAwareVerificationMode)2 VerificationMode (org.mockito.verification.VerificationMode)2 InvocationMatcher (org.mockito.internal.invocation.InvocationMatcher)1 MockingProgress (org.mockito.internal.progress.MockingProgress)1 OngoingStubbingImpl (org.mockito.internal.stubbing.OngoingStubbingImpl)1 StubbedInvocationMatcher (org.mockito.internal.stubbing.StubbedInvocationMatcher)1 VerificationDataImpl (org.mockito.internal.verification.VerificationDataImpl)1