1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5
6package org.mockito.invocation;
7
8import java.io.Serializable;
9import java.lang.reflect.Method;
10
11/**
12 * An invocation on a mock.
13 *
14 * <p>
15 * A placeholder for mock, the method that was called and the arguments that were passed.
16 */
17public interface InvocationOnMock extends Serializable {
18
19    /**
20     * returns the mock object
21     *
22     * @return mock object
23     */
24    Object getMock();
25
26    /**
27     * returns the method
28     *
29     * @return method
30     */
31    Method getMethod();
32
33    /**
34     * Returns arguments passed to the method.
35     *
36     * Vararg are expanded in this array.
37     *
38     * @return arguments
39     */
40    Object[] getArguments();
41
42    /**
43     * Returns casted argument at the given index.
44     *
45     * Can lookup in expanded arguments form {@link #getArguments()}.
46     *
47     * @param index argument index
48     * @return casted argument at the given index
49     * @since 2.1.0
50     */
51    <T> T getArgument(int index);
52
53    /**
54     * calls real method
55     * <p>
56     * <b>Warning:</b> depending on the real implementation it might throw exceptions
57     *
58     * @return whatever the real method returns / throws
59     * @throws Throwable in case real method throws
60     */
61    Object callRealMethod() throws Throwable;
62}
63