Class MockSettingsImpl<T>
- All Implemented Interfaces:
Serializable,MockCreationSettings<T>,MockSettings
- See Also:
-
Field Summary
Fields inherited from class org.mockito.internal.creation.settings.CreationSettings
defaultAnswer, extraInterfaces, genericTypeToMock, invocationListeners, mockMaker, mockName, mockType, name, serializableMode, spiedInstance, strictness, stripAnnotations, stubbingLookupListeners, stubOnly, typeToMock, verificationStartedListeners -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription<T2> MockCreationSettings<T2> Creates immutable view of mock settings used later by Mockito.<T2> MockCreationSettings<T2> buildStatic(Class<T2> classToMock) Creates immutable view of mock settings used later by Mockito, for use within a static mocking.defaultAnswer(Answer defaultAnswer) Specifies default answers to interactions.extraInterfaces(Class<?>... extraInterfaces) Specifies extra interfaces the mock should implement.genericTypeToMock(Type genericType) Specifies the generic type of the mock, preserving the information lost to Java type erasure.Object[]Used when arguments should be passed to the mocked object's constructor, regardless of whether these arguments are supplied directly, or whether they include the outer instance.the default answer for this mock, seeMockSettings.defaultAnswer(org.mockito.stubbing.Answer).the extra interfaces the mock object should implement.the name of this mock, as printed on verification errors; seeMockSettings.name(java.lang.String).Used when mocking non-static inner classes in conjunction withMockCreationSettings.isUsingConstructor()the spied instance - needed for spies.Mocked type.booleaninvocationListeners(InvocationListener... listeners) Registers a listener for method invocations on this mock.booleanWhether the mock is only for stubbing, i.e.booleanInforms whether the mock instance should be created via constructorlenient()Specifies theMockMakerfor the mock.Specifies mock name.outerInstance(Object outerClassInstance) Makes it possible to mock non-static inner classes in conjunction withMockSettings.useConstructor(Object...).Configures the mock to be serializable.serializable(SerializableMode mode) Configures the mock to be serializable with a specific serializable mode.spiedInstance(Object spiedInstance) Specifies the instance to spy on.strictness(Strictness strictness) Specifies strictness level for the mock.stubbingLookupListeners(StubbingLookupListener... listeners) Add stubbing lookup listener to the mock object.stubOnly()A stub-only mock does not record method invocations, thus saving memory but disallowing verification of invocations.useConstructor(Object... constructorArgs) Mockito attempts to use constructor when creating instance of the mock.Enables real-time logging of method invocations on this mock.verificationStartedListeners(VerificationStartedListener... listeners) Registers a listener(s) that will be notified when user starts verification.By default, Mockito makes an attempt to preserve all annotation metadata on the mocked type and its methods to mirror the mocked type as closely as possible.Methods inherited from class org.mockito.internal.creation.settings.CreationSettings
getGenericTypeToMock, getInvocationListeners, getMockMaker, getMockType, getName, getSerializableMode, getStrictness, getStubbingLookupListeners, getVerificationStartedListeners, isLenient, isSerializable, isStripAnnotations, setExtraInterfaces, setGenericTypeToMock, setMockName, setMockType, setSerializableMode, setTypeToMockMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.mockito.mock.MockCreationSettings
getGenericTypeToMock, getInvocationListeners, getMockMaker, getMockType, getSerializableMode, getStrictness, getStubbingLookupListeners, getVerificationStartedListeners, isLenient, isSerializable, isStripAnnotations
-
Constructor Details
-
MockSettingsImpl
public MockSettingsImpl()
-
-
Method Details
-
serializable
Description copied from interface:MockSettingsConfigures the mock to be serializable. With this feature you can use a mock in a place that requires dependencies to be serializable.WARNING: This should be rarely used in unit testing.
The behaviour was implemented for a specific use case of a BDD spec that had an unreliable external dependency. This was in a web environment and the objects from the external dependency were being serialized to pass between layers.
Example:
List serializableMock = mock(List.class, withSettings().serializable());- Specified by:
serializablein interfaceMockSettings- Returns:
- settings instance so that you can fluently specify other settings
-
serializable
Description copied from interface:MockSettingsConfigures the mock to be serializable with a specific serializable mode. With this feature you can use a mock in a place that requires dependencies to be serializable.WARNING: This should be rarely used in unit testing.
The behaviour was implemented for a specific use case of a BDD spec that had an unreliable external dependency. This was in a web environment and the objects from the external dependency were being serialized to pass between layers.
List serializableMock = mock(List.class, withSettings().serializable(SerializableMode.ACROSS_CLASSLOADERS));- Specified by:
serializablein interfaceMockSettings- Parameters:
mode- serialization mode- Returns:
- settings instance so that you can fluently specify other settings
-
extraInterfaces
Description copied from interface:MockSettingsSpecifies extra interfaces the mock should implement. Might be useful for legacy code or some corner cases.This mysterious feature should be used very occasionally. The object under test should know exactly its collaborators and dependencies. If you happen to use it often than please make sure you are really producing simple, clean and readable code.
Examples:
Foo foo = mock(Foo.class, withSettings().extraInterfaces(Bar.class, Baz.class)); //now, the mock implements extra interfaces, so following casting is possible: Bar bar = (Bar) foo; Baz baz = (Baz) foo;- Specified by:
extraInterfacesin interfaceMockSettings- Parameters:
extraInterfaces- extra interfaces the mock should implement.- Returns:
- settings instance so that you can fluently specify other settings
-
getMockName
Description copied from interface:MockCreationSettingsthe name of this mock, as printed on verification errors; seeMockSettings.name(java.lang.String).- Specified by:
getMockNamein interfaceMockCreationSettings<T>- Overrides:
getMockNamein classCreationSettings<T>
-
getExtraInterfaces
Description copied from interface:MockCreationSettingsthe extra interfaces the mock object should implement.- Specified by:
getExtraInterfacesin interfaceMockCreationSettings<T>- Overrides:
getExtraInterfacesin classCreationSettings<T>
-
getSpiedInstance
Description copied from interface:MockCreationSettingsthe spied instance - needed for spies.- Specified by:
getSpiedInstancein interfaceMockCreationSettings<T>- Overrides:
getSpiedInstancein classCreationSettings<T>
-
name
Description copied from interface:MockSettingsSpecifies mock name. Naming mocks can be helpful for debugging - the name is used in all verification errors.Beware that naming mocks is not a solution for complex code which uses too many mocks or collaborators. If you have too many mocks then refactor the code so that it's easy to test/debug without necessity of naming mocks.
If you use @Mock annotation then you've got naming mocks for free! @Mock uses field name as mock name.
Read more.Examples:
Foo foo = mock(Foo.class, withSettings().name("foo")); //Below does exactly the same: Foo foo = mock(Foo.class, "foo");- Specified by:
namein interfaceMockSettings- Parameters:
name- the name of the mock, later used in all verification errors- Returns:
- settings instance so that you can fluently specify other settings
-
spiedInstance
Description copied from interface:MockSettingsSpecifies the instance to spy on. Makes sense only for spies/partial mocks. Sets the instance that will be spied. Actually copies the internal fields of the passed instance to the mock.As usual, you are going to read the partial mock warning: Object oriented programming is more or less about tackling complexity by dividing the complexity into separate, specific, SRPy objects. How does partial mock fit into this paradigm? Well, it just doesn't... Partial mock usually means that the complexity has been moved to a different method on the same object. In most cases, this is not the way you want to design your application.
However, there are rare cases when partial mocks come handy: dealing with code you cannot change easily (3rd party interfaces, interim refactoring of legacy code etc.) However, I wouldn't use partial mocks for new, test-driven and well-designed code.
Enough warnings about partial mocks, see an example how spiedInstance() works:
About stubbing for a partial mock, as it is a spy it will always call the real method, unless you use theFoo foo = mock(Foo.class, withSettings().spiedInstance(fooInstance)); //Below does exactly the same: Foo foo = spy(fooInstance);doReturn|Throw|Answer|CallRealMethodstubbing style. Example:List list = new LinkedList(); List spy = spy(list); //Impossible: real method is called so spy.get(0) throws IndexOutOfBoundsException (the list is yet empty) when(spy.get(0)).thenReturn("foo"); //You have to use doReturn() for stubbing doReturn("foo").when(spy).get(0);- Specified by:
spiedInstancein interfaceMockSettings- Parameters:
spiedInstance- to spy on- Returns:
- settings instance so that you can fluently specify other settings
-
defaultAnswer
Description copied from interface:MockSettingsSpecifies default answers to interactions. It's quite advanced feature, and typically you don't need it to write decent tests. However, it can be helpful when working with legacy systems.It is the default answer, so it will be used only when you don't stub the method call.
Foo mock = mock(Foo.class, withSettings().defaultAnswer(RETURNS_SMART_NULLS)); Foo mockTwo = mock(Foo.class, withSettings().defaultAnswer(new YourOwnAnswer())); //Below does exactly the same: Foo mockTwo = mock(Foo.class, new YourOwnAnswer());- Specified by:
defaultAnswerin interfaceMockSettings- Parameters:
defaultAnswer- default answer to be used by mock when not stubbed- Returns:
- settings instance so that you can fluently specify other settings
-
getDefaultAnswer
Description copied from interface:MockCreationSettingsthe default answer for this mock, seeMockSettings.defaultAnswer(org.mockito.stubbing.Answer).- Specified by:
getDefaultAnswerin interfaceMockCreationSettings<T>- Overrides:
getDefaultAnswerin classCreationSettings<T>
-
stubOnly
Description copied from interface:MockSettingsA stub-only mock does not record method invocations, thus saving memory but disallowing verification of invocations.Example:
List stubOnly = mock(List.class, withSettings().stubOnly());- Specified by:
stubOnlyin interfaceMockSettings- Returns:
- settings instance so that you can fluently specify other settings
-
useConstructor
Description copied from interface:MockSettingsMockito attempts to use constructor when creating instance of the mock. This is particularly useful for spying on abstract classes. See alsoMockito.spy(Class).Example:
//Robust API, via settings builder: OtherAbstract spy = mock(OtherAbstract.class, withSettings() .useConstructor().defaultAnswer(CALLS_REAL_METHODS)); //Mocking an abstract class with constructor arguments SomeAbstract spy = mock(SomeAbstract.class, withSettings() .useConstructor("arg1", 123).defaultAnswer(CALLS_REAL_METHODS)); //Mocking a non-static inner abstract class: InnerAbstract spy = mock(InnerAbstract.class, withSettings() .useConstructor().outerInstance(outerInstance).defaultAnswer(CALLS_REAL_METHODS));- Specified by:
useConstructorin interfaceMockSettings- Parameters:
constructorArgs- The arguments to pass to the constructor. Not passing any arguments means that a parameter-less constructor will be called- Returns:
- settings instance so that you can fluently specify other settings
-
outerInstance
Description copied from interface:MockSettingsMakes it possible to mock non-static inner classes in conjunction withMockSettings.useConstructor(Object...).Example:
InnerClass mock = mock(InnerClass.class, withSettings() .useConstructor().outerInstance(outerInstance).defaultAnswer(CALLS_REAL_METHODS));- Specified by:
outerInstancein interfaceMockSettings- Returns:
- settings instance so that you can fluently specify other settings
-
withoutAnnotations
Description copied from interface:MockSettingsBy default, Mockito makes an attempt to preserve all annotation metadata on the mocked type and its methods to mirror the mocked type as closely as possible. If this is not desired, this option can be used to disable this behavior.- Specified by:
withoutAnnotationsin interfaceMockSettings- Returns:
- settings instance so that you can fluently specify other settings
-
isUsingConstructor
public boolean isUsingConstructor()Description copied from interface:MockCreationSettingsInforms whether the mock instance should be created via constructor- Specified by:
isUsingConstructorin interfaceMockCreationSettings<T>- Overrides:
isUsingConstructorin classCreationSettings<T>
-
getOuterClassInstance
Description copied from interface:MockCreationSettingsUsed when mocking non-static inner classes in conjunction withMockCreationSettings.isUsingConstructor()- Specified by:
getOuterClassInstancein interfaceMockCreationSettings<T>- Overrides:
getOuterClassInstancein classCreationSettings<T>- Returns:
- the outer class instance used for creation of the mock object via the constructor.
-
getConstructorArgs
Description copied from interface:MockCreationSettingsUsed when arguments should be passed to the mocked object's constructor, regardless of whether these arguments are supplied directly, or whether they include the outer instance.- Specified by:
getConstructorArgsin interfaceMockCreationSettings<T>- Overrides:
getConstructorArgsin classCreationSettings<T>- Returns:
- An array of arguments that are passed to the mocked object's constructor. If
MockCreationSettings.getOuterClassInstance()is available, it is prepended to the passed arguments.
-
isStubOnly
public boolean isStubOnly()Description copied from interface:MockCreationSettingsWhether the mock is only for stubbing, i.e. does not remember parameters on its invocation and therefore cannot be used for verification- Specified by:
isStubOnlyin interfaceMockCreationSettings<T>- Overrides:
isStubOnlyin classCreationSettings<T>
-
verboseLogging
Description copied from interface:MockSettingsEnables real-time logging of method invocations on this mock. Can be used during test debugging in order to find wrong interactions with this mock.Invocations are logged as they happen to the standard output stream.
Calling this method multiple times makes no difference.
Example:
List mockWithLogger = mock(List.class, withSettings().verboseLogging());- Specified by:
verboseLoggingin interfaceMockSettings- Returns:
- settings instance so that you can fluently specify other settings
-
invocationListeners
Description copied from interface:MockSettingsRegisters a listener for method invocations on this mock. The listener is notified every time a method on this mock is called.Multiple listeners may be added, and they will be notified in the order they were supplied. Example:
See theList mockWithListener = mock(List.class, withSettings().invocationListeners(new YourInvocationListener()));listener interfacefor more details.- Specified by:
invocationListenersin interfaceMockSettings- Parameters:
listeners- The invocation listeners to add. May not be null.- Returns:
- settings instance so that you can fluently specify other settings
-
stubbingLookupListeners
Description copied from interface:MockSettingsAdd stubbing lookup listener to the mock object. Multiple listeners may be added, and they will be notified in an orderly fashion. For use cases and more info seeStubbingLookupListener. Example:List mockWithListener = mock(List.class, withSettings().stubbingLookupListeners(new YourStubbingLookupListener()));- Specified by:
stubbingLookupListenersin interfaceMockSettings- Parameters:
listeners- The stubbing lookup listeners to add. May not be null.- Returns:
- settings instance so that you can fluently specify other settings
-
verificationStartedListeners
Description copied from interface:MockSettingsRegisters a listener(s) that will be notified when user starts verification. SeeVerificationStartedListeneron how such listener can be useful.When multiple listeners are added, they are notified in order they were supplied. There is no reason to supply multiple listeners, but we wanted to keep the API simple and consistent with
MockSettings.invocationListeners(InvocationListener...).Throws exception when any of the passed listeners is null or when the entire vararg array is null.
- Specified by:
verificationStartedListenersin interfaceMockSettings- Parameters:
listeners- to be notified when user starts verification.- Returns:
- settings instance so that you can fluently specify other settings
-
hasInvocationListeners
public boolean hasInvocationListeners() -
getTypeToMock
Description copied from interface:MockCreationSettingsMocked type. An interface or class the mock should implement / extend.- Specified by:
getTypeToMockin interfaceMockCreationSettings<T>- Overrides:
getTypeToMockin classCreationSettings<T>
-
build
Description copied from interface:MockSettingsCreates immutable view of mock settings used later by Mockito. Framework integrators can use this method to create instances of creation settings and use them in advanced use cases, for example to create invocations withInvocationFactory, or to implement customMockHandler. SinceMockCreationSettingsisNotExtensible, Mockito public API needs a creation method for this type.- Specified by:
buildin interfaceMockSettings- Type Parameters:
T2- type to mock- Parameters:
typeToMock- class to mock- Returns:
- immutable view of mock settings
-
buildStatic
Description copied from interface:MockSettingsCreates immutable view of mock settings used later by Mockito, for use within a static mocking. Framework integrators can use this method to create instances of creation settings and use them in advanced use cases, for example to create invocations withInvocationFactory, or to implement customMockHandler. SinceMockCreationSettingsisNotExtensible, Mockito public API needs a creation method for this type.- Specified by:
buildStaticin interfaceMockSettings- Type Parameters:
T2- type to mock- Parameters:
classToMock- class to mock- Returns:
- immutable view of mock settings
-
lenient
- Specified by:
lenientin interfaceMockSettings
-
strictness
Description copied from interface:MockSettingsSpecifies strictness level for the mock. The default strictness level is determined by the rule/runner used. If you are using no rule/runner, the default strictness level is LENIENTFoo defaultStrictMock = mock(Foo.class); Foo explicitStrictMock = mock(Foo.class, withSettings().strictness(Strictness.STRICT_STUBS)); Foo lenientMock = mock(Foo.class, withSettings().strictness(Strictness.LENIENT));- Specified by:
strictnessin interfaceMockSettings- Parameters:
strictness- the strictness level to set on mock- Returns:
- settings instance so that you can fluently specify other settings
-
mockMaker
Description copied from interface:MockSettingsSpecifies theMockMakerfor the mock. The default depends on your project as described in the class documentation ofMockMaker. You should usually use the default, this option primarily exists to ease migrations. You may specify either one of the constants fromMockMakers,Object mock = Mockito.mock(Object.class, Mockito.withSettings() .mockMaker(MockMakers.INLINE));or thebinary nameof a class which implements theMockMakerinterface.Object mock = Mockito.mock(Object.class, Mockito.withSettings() .mockMaker("org.awesome.mockito.AwesomeMockMaker"));- Specified by:
mockMakerin interfaceMockSettings- Parameters:
mockMaker- theMockMakerto use for the mock- Returns:
- settings instance so that you can fluently specify other settings
-
genericTypeToMock
Description copied from interface:MockSettingsSpecifies the generic type of the mock, preserving the information lost to Java type erasure.- Specified by:
genericTypeToMockin interfaceMockSettings- Parameters:
genericType-- Returns:
-