Search in sources :

Example 1 with NotAMockException

use of org.mockito.exceptions.misusing.NotAMockException in project mockito by mockito.

the class MockitoCore method verifyNoMoreInteractions.

public void verifyNoMoreInteractions(Object... mocks) {
    assertMocksNotEmpty(mocks);
    mockingProgress().validateState();
    for (Object mock : mocks) {
        try {
            if (mock == null) {
                throw nullPassedToVerifyNoMoreInteractions();
            }
            InvocationContainer invocations = getMockHandler(mock).getInvocationContainer();
            VerificationDataImpl data = new VerificationDataImpl(invocations, null);
            noMoreInteractions().verify(data);
        } catch (NotAMockException e) {
            throw notAMockPassedToVerifyNoMoreInteractions();
        }
    }
}
Also used : VerificationDataImpl(org.mockito.internal.verification.VerificationDataImpl) NotAMockException(org.mockito.exceptions.misusing.NotAMockException) InvocationContainer(org.mockito.internal.stubbing.InvocationContainer)

Example 2 with NotAMockException

use of org.mockito.exceptions.misusing.NotAMockException in project powermock by powermock.

the class MockitoMethodInvocationControl method performIntercept.

private Object performIntercept(MethodInterceptorFilter invocationHandler, final Object interceptionObject, final Method method, Object[] arguments) throws Throwable {
    MockHandler mockHandler = invocationHandler.getHandler();
    final CleanTraceRealMethod cglibProxyRealMethod = new CleanTraceRealMethod(new RealMethod() {

        private static final long serialVersionUID = 4564320968038564170L;

        @Override
        public Object invoke(Object target, Object[] arguments) throws Throwable {
            /*
                     * Instruct the MockGateway to don't intercept the next call.
                     * The reason is that when Mockito is spying on objects it
                     * should call the "real method" (which is proxied by Mockito
                     * anyways) so that we don't end up in here one more time which
                     * causes infinite recursion. This should not be done if the
                     * interceptionObject is a final system class because these are
                     * never caught by the Mockito proxy.
                     */
            final Class<?> type = Whitebox.getType(interceptionObject);
            final boolean isFinalSystemClass = type.getName().startsWith("java.") && Modifier.isFinal(type.getModifiers());
            if (!isFinalSystemClass) {
                MockRepository.putAdditionalState(MockGateway.DONT_MOCK_NEXT_CALL, true);
            }
            try {
                return method.invoke(target, arguments);
            } catch (InvocationTargetException e) {
                SafeExceptionRethrower.safeRethrow(e.getCause());
            }
            return null;
        }
    });
    Invocation invocation = new InvocationImpl(interceptionObject, new DelegatingMethod(method), arguments, SequenceNumber.next(), cglibProxyRealMethod, new LocationImpl()) {

        private static final long serialVersionUID = -3679957412502758558L;

        @Override
        public String toString() {
            return new ToStringGenerator().generate(getMock(), getMethod(), getArguments());
        }
    };
    try {
        return replaceMatchersBinderIfNeeded(mockHandler).handle(invocation);
    } catch (NotAMockException e) {
        if (invocation.getMock().getClass().getName().startsWith("java.") && MockRepository.getInstanceMethodInvocationControl(invocation.getMock()) != null) {
            return invocation.callRealMethod();
        } else {
            throw e;
        }
    } catch (MockitoAssertionError e) {
        InvocationControlAssertionError.updateErrorMessageForMethodInvocation(e);
        throw e;
    }
}
Also used : MockitoAssertionError(org.mockito.exceptions.base.MockitoAssertionError) Invocation(org.mockito.invocation.Invocation) NotAMockException(org.mockito.exceptions.misusing.NotAMockException) InvocationImpl(org.mockito.internal.invocation.InvocationImpl) InvocationTargetException(java.lang.reflect.InvocationTargetException) CleanTraceRealMethod(org.mockito.internal.invocation.realmethod.CleanTraceRealMethod) DelegatingMethod(org.mockito.internal.creation.DelegatingMethod) LocationImpl(org.mockito.internal.debugging.LocationImpl) InternalMockHandler(org.mockito.internal.InternalMockHandler) MockHandler(org.mockito.invocation.MockHandler) RealMethod(org.mockito.internal.invocation.realmethod.RealMethod) CleanTraceRealMethod(org.mockito.internal.invocation.realmethod.CleanTraceRealMethod)

Aggregations

NotAMockException (org.mockito.exceptions.misusing.NotAMockException)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 MockitoAssertionError (org.mockito.exceptions.base.MockitoAssertionError)1 InternalMockHandler (org.mockito.internal.InternalMockHandler)1 DelegatingMethod (org.mockito.internal.creation.DelegatingMethod)1 LocationImpl (org.mockito.internal.debugging.LocationImpl)1 InvocationImpl (org.mockito.internal.invocation.InvocationImpl)1 CleanTraceRealMethod (org.mockito.internal.invocation.realmethod.CleanTraceRealMethod)1 RealMethod (org.mockito.internal.invocation.realmethod.RealMethod)1 InvocationContainer (org.mockito.internal.stubbing.InvocationContainer)1 VerificationDataImpl (org.mockito.internal.verification.VerificationDataImpl)1 Invocation (org.mockito.invocation.Invocation)1 MockHandler (org.mockito.invocation.MockHandler)1