Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.mockito.plugins
Interface MockMaker

All Known Implementing Classes:
  CglibMockMaker

    @Incubating
    public interface MockMaker

The facility to create mocks.

By default, an internal cglib/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 cglib/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`

Method Summary
`
`<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.
`MockHandler` | `getHandler(java.lang.Object mock)` Returns the handler for the `mock`.
`void` | `resetMock(java.lang.Object mock, MockHandler newHandler, MockCreationSettings settings)` Replaces the existing handler on `mock` with `newHandler`.

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

### getHandler

    MockHandler getHandler(java.lang.Object mock)

  Returns the handler for the `mock`. Do not provide your own implementations at this time because the work on the `MockHandler` api is not completed. Use the instance provided to you by Mockito at `createMock(org.mockito.mock.MockCreationSettings, org.mockito.invocation.MockHandler)` or `resetMock(java.lang.Object, org.mockito.invocation.MockHandler, org.mockito.mock.MockCreationSettings)`.

  Parameters:
    `mock` - The mock instance.
  Returns:
    may return null - it means that there is no handler attached to provided object. This means the passed object is not really a Mockito mock.
  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

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD