Interface MockMaker

  • All Known Subinterfaces:
    ClassCreatingMockMaker, InlineMockMaker
    All Known Implementing Classes:
    ByteBuddyMockMaker, InlineByteBuddyMockMaker, SubclassByteBuddyMockMaker

    public interface MockMaker
    The facility to create mocks.

    By default, an internal byte-buddy/asm/objenesis based implementation is used.

    MockMaker is an extension point that makes it possible to use custom dynamic proxies and avoid using the default byte-buddy/asm/objenesis implementation. For example, the android users can use a MockMaker that can work with Dalvik virtual machine and hence bring Mockito to android apps developers.

    Using the extension point

    Suppose you wrote an extension to create mocks with some Awesome library, in order to tell Mockito to use it you need to put in your classpath:

    1. The implementation itself, for example org.awesome.mockito.AwesomeMockMaker that extends the MockMaker.
    2. A file "mockito-extensions/org.mockito.plugins.MockMaker". The content of this file is exactly a one line with the qualified name: org.awesome.mockito.AwesomeMockMaker.

    Note that if several mockito-extensions/org.mockito.plugins.MockMaker files exists in the classpath Mockito will only use the first returned by the standard ClassLoader.getResource(java.lang.String) mechanism.

    Since:
    1.9.5
    See Also:
    MockCreationSettings, MockHandler
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Interface Description
      static interface  MockMaker.TypeMockability
      Carries the mockability information
    • Method Detail

      • createMock

        <T> T createMock​(MockCreationSettings<T> settings,
                         MockHandler handler)
        If you want to provide your own implementation of MockMaker this method should:
        • Create a proxy object that implements settings.typeToMock and potentially also settings.extraInterfaces.
        • You may use the information from settings to create/configure your proxy object.
        • Your proxy object should carry the handler with it. For example, if you generate byte code to create the proxy you could generate an extra field to keep the handler with the generated object. Your implementation of MockMaker is required to provide this instance of handler when getHandler(Object) is called.
        Type Parameters:
        T - Type of the mock to return, actually the settings.getTypeToMock.
        Parameters:
        settings - Mock creation settings like type to mock, extra interfaces and so on.
        handler - See MockHandler. Do not provide your own implementation at this time. Make sure your implementation of getHandler(Object) will return this instance.
        Returns:
        The mock instance.
        Since:
        1.9.5
      • resetMock

        void resetMock​(java.lang.Object mock,
                       MockHandler newHandler,
                       MockCreationSettings settings)
        Replaces the existing handler on mock with newHandler.

        The invocation handler actually store invocations to achieve stubbing and verification. In order to reset the mock, we pass a new instance of the invocation handler.

        Your implementation should make sure the newHandler is correctly associated to passed mock

        Parameters:
        mock - The mock instance whose invocation handler is to be replaced.
        newHandler - The new invocation handler instance.
        settings - The mock settings - should you need to access some of the mock creation details.
        Since:
        1.9.5
      • isTypeMockable

        @Incubating
        MockMaker.TypeMockability isTypeMockable​(java.lang.Class<?> type)
        Indicates if the given type can be mocked by this mockmaker.

        Mockmaker may have different capabilities in term of mocking, typically Mockito 1.x's internal mockmaker cannot mock final types. Other implementations, may have different limitations.

        Parameters:
        type - The type inspected for mockability.
        Returns:
        object that carries the information about mockability of given type.
        Since:
        2.1.0