blob: 126b48e5f82f70bb9096f57746519752f104d5bd [file] [log] [blame]
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.MockHandler;
import org.mockito.mock.MockCreationSettings;
import org.mockito.quality.MockitoHint;
import org.mockito.stubbing.Stubbing;
import java.util.Collection;
/**
* Provides mocking information.
* For example, you can identify whether a particular object is either a mock or a spy.
* For examples and more information please refer to the javadoc of the individual methods on this class.
*
* @since 1.9.5
*/
public interface MockingDetails {
/**
* Informs if the object is a mock. isMock() for null input returns false.
* @return true if the object is a mock or a spy (spy is a different kind of mock, but it is still a mock).
*
* @since 1.9.5
*/
boolean isMock();
/**
* Informs if the object is a spy. isSpy() for null input returns false.
* @return true if the object is a spy.
*
* @since 1.9.5
*/
boolean isSpy();
/**
* All method invocations on this mock.
* Can be empty - it means there were no interactions with the mock.
* <p>
* This method is useful for framework integrators and for certain edge cases.
* <p>
* Manipulating the collection (e.g. by removing, adding elements) is safe and has no effect on the mock.
* <p>
* Throws meaningful exception when object wrapped by MockingDetails is not a mock.
*
* @since 1.10.0
*/
Collection<Invocation> getInvocations();
/**
* Returns various mock settings provided when the mock was created, for example:
* mocked class, mock name (if any), any extra interfaces (if any), etc.
* See also {@link MockCreationSettings}.
* <p>
* This method is useful for framework integrators and for certain edge cases.
* <p>
* If <code>null</code> or non-mock was passed to {@link Mockito#mockingDetails(Object)}
* then this method will throw with an appropriate exception.
* After all, non-mock objects do not have any mock creation settings.
* @since 2.1.0
*/
MockCreationSettings<?> getMockCreationSettings();
/**
* Returns stubbings declared on this mock object.
* <pre class="code"><code class="java">
* Mockito.mockingDetails(mock).getStubbings()
* </code></pre>
* What is 'stubbing'?
* Stubbing is your when(x).then(y) declaration, e.g. configuring the mock to behave in a specific way,
* when specific method with specific arguments is invoked on a mock.
* Typically stubbing is configuring mock to return X when method Y is invoked.
* <p>
* Why do you need to access stubbings of a mock?
* In a normal workflow of creation clean tests, there is no need for this API.
* However, it is useful for advanced users, edge cases or framework integrators.
* For example, Mockito internally uses this API to report and detect unused stubbings
* that should be removed from test. Unused stubbings are dead code that needs to be removed
* (see {@link MockitoHint}).
* <p>
* Manipulating the collection (e.g. by removing, adding elements) is safe and has no effect on the mock.
* <p>
* This method throws meaningful exception when object wrapped by MockingDetails is not a mock.
*
* @since 2.2.3
*/
Collection<Stubbing> getStubbings();
/**
* Returns printing-friendly list of the invocations that occurred with the mock object.
* Additionally, this method prints stubbing information, including unused stubbings.
* For more information about unused stubbing detection see {@link MockitoHint}.
* <p>
* You can use this method for debugging,
* print the output of this method to the console to find out about all interactions with the mock.
* <p>
* Content that is printed is subject to change as we discover better ways of presenting important mock information.
* Don't write code that depends on the output of this method.
* If you need to know about interactions and stubbings, use {@link #getStubbings()} and {@link #getInvocations()}.
* <p>
* This method was moved from the deprecated and semi-hidden type {@link MockitoDebugger}.
* <p>
* This method throws meaningful exception when object wrapped by MockingDetails is not a mock.
*
* @since 2.2.6
*/
String printInvocations();
/**
* Returns the {@link MockHandler} associated with this mock object.
* The handler is the core of mock object method handling.
* This method is useful for framework integrators.
* For example, other frameworks may use mock handler to simulate method calls on the Mock object.
*
* @return mock handler instance of this mock
* @since 2.10.0
*/
@Incubating
MockHandler getMockHandler();
/**
* Returns the mock object which is associated with this this instance of {@link MockingDetails}.
* Basically, it's the object that you have passed to {@link Mockito#mockingDetails(Object)} method.
*
* @return the mock object of this mocking details instance
*
* @since 2.11.0
*/
Object getMock();
}