private Object invokeMethodWithContext(Object mockOrRealObject, InvocationConstraints constraints, Object[] args) { Invocation invocation = new DelegateInvocation( mockOrRealObject, constraints.invocationCount, constraints.minInvocations, constraints.maxInvocations); Object[] delegateArgs = getArgumentsWithExtraInvocationObject(invocation, args); try { return executeMethodToInvoke(delegateArgs); } finally { constraints.setLimits(invocation.getMinInvocations(), invocation.getMaxInvocations()); } }