EasyMockSupport
Date: 2015-09-17

org.easymock

## Class EasyMockSupport

- java.lang.Object
- - org.easymock.EasyMockSupport

-     public class EasyMockSupport
      extends java.lang.Object

  Helper class to keep track of mocks easily. See EasyMock documentation and SupportTest sample.

  Example of usage:

       public class SupportTest extends EasyMockSupport {
           @Test
           public void test() {
               firstMock = createMock(A.class);
               secondMock = createMock(B.class);

               replayAll(); // put both mocks in replay mode

               // ... use mocks ..

               verifyAll(); // verify both mocks
           }
       }

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.util.List<IMocksControl>` | `controls` List of all controls created

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `EasyMockSupport()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `IMocksControl` | `createControl()` Creates a control, order checking is disabled by default.
    `IMocksControl` | `createControl(MockType type)` Creates a control of the given type.
    `<T> T` | `createMock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default.
    `<T> T` | `createMock(MockType type, java.lang.Class<T> toMock)` Creates a mock object of the requested type that implements the given interface or extends the given class
    `<T> T` | `createMock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default.
    `<T> T` | `createMock(java.lang.String name, MockType type, java.lang.Class<T> toMock)` Creates a mock object of the requested type that implements the given interface or extends the given class
    `<T> IMockBuilder<T>` | `createMockBuilder(java.lang.Class<T> toMock)` Create a mock builder allowing to create a partial mock for the given class or interface.
    `IMocksControl` | `createNiceControl()` Creates a control, order checking is disabled by default, and the mock objects created by this control will return `0`, `null` or `false` for unexpected invocations.
    `<T> T` | `createNiceMock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
    `<T> T` | `createNiceMock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
    `IMocksControl` | `createStrictControl()` Creates a control, order checking is enabled by default.
    `<T> T` | `createStrictMock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is enabled by default.
    `<T> T` | `createStrictMock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is enabled by default.
    `static void` | `injectMocks(java.lang.Object obj)` Inject a mock to every fields annotated with `Mock` on the class passed in parameter.
    `<T> T` | `mock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default.
    `<T> T` | `mock(MockType type, java.lang.Class<T> toMock)` Creates a mock object of the requested type that implements the given interface or extends the given class
    `<T> T` | `mock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default.
    `<T> T` | `mock(java.lang.String name, MockType type, java.lang.Class<T> toMock)` Creates a mock object of the requested type that implements the given interface or extends the given class
    `<T> T` | `niceMock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
    `<T> T` | `niceMock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
    `<T> IMockBuilder<T>` | `partialMockBuilder(java.lang.Class<T> toMock)` Create a mock builder allowing to create a partial mock for the given class or interface.
    `void` | `replayAll()` Switches all registered mock objects (more exactly: the controls of the mock objects) to replay mode.
    `void` | `resetAll()` Resets all registered mock objects (more exactly: the controls of the mock objects).
    `void` | `resetAllToDefault()` Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with default behavior.
    `void` | `resetAllToNice()` Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with nice behavior.
    `void` | `resetAllToStrict()` Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with strict behavior.
    `<T> T` | `strictMock(java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is enabled by default.
    `<T> T` | `strictMock(java.lang.String name, java.lang.Class<T> toMock)` Creates a mock object that implements the given interface, order checking is enabled by default.
    `void` | `verifyAll()` Verifies all registered mock objects (more exactly: the controls of the mock objects).

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### controls

          protected final java.util.List<IMocksControl> controls

      List of all controls created

  - ### Constructor Detail

    - #### EasyMockSupport

          public EasyMockSupport()

  - ### Method Detail

    - #### mock

          public <T> T mock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Since:
        ${project.version}

    - #### mock

          public <T> T mock(java.lang.String name,
                   java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.
      Since:
        ${project.version}

    - #### mock

          public <T> T mock(MockType type,
                   java.lang.Class<T> toMock)

      Creates a mock object of the requested type that implements the given interface or extends the given class
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `type` - the type of the mock to be created.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.
      Since:
        ${project.version}

    - #### mock

          public <T> T mock(java.lang.String name,
                   MockType type,
                   java.lang.Class<T> toMock)

      Creates a mock object of the requested type that implements the given interface or extends the given class
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `type` - the type of the mock to be created.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.
      Since:
        ${project.version}

    - #### strictMock

          public <T> T strictMock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is enabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Since:
        ${project.version}

    - #### strictMock

          public <T> T strictMock(java.lang.String name,
                         java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is enabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.
      Since:
        ${project.version}

    - #### niceMock

          public <T> T niceMock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Since:
        ${project.version}

    - #### niceMock

          public <T> T niceMock(java.lang.String name,
                       java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.
      Since:
        ${project.version}

    - #### partialMockBuilder

          public <T> IMockBuilder<T> partialMockBuilder(java.lang.Class<T> toMock)

      Create a mock builder allowing to create a partial mock for the given class or interface.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        a mock builder to create a partial mock
      Since:
        ${project.version}

    - #### createMock

          public <T> T createMock(MockType type,
                         java.lang.Class<T> toMock)

      Creates a mock object of the requested type that implements the given interface or extends the given class
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `type` - the type of the mock to be created.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.

    - #### createMock

          public <T> T createMock(java.lang.String name,
                         MockType type,
                         java.lang.Class<T> toMock)

      Creates a mock object of the requested type that implements the given interface or extends the given class
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `type` - the type of the mock to be created.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.

    - #### createStrictMock

          public <T> T createStrictMock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is enabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.

    - #### createStrictMock

          public <T> T createStrictMock(java.lang.String name,
                               java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is enabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.

    - #### createMock

          public <T> T createMock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.

    - #### createMock

          public <T> T createMock(java.lang.String name,
                         java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.

    - #### createNiceMock

          public <T> T createNiceMock(java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.

    - #### createNiceMock

          public <T> T createNiceMock(java.lang.String name,
                             java.lang.Class<T> toMock)

      Creates a mock object that implements the given interface, order checking is disabled by default, and the mock object will return `0`, `null` or `false` for unexpected invocations.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `name` - the name of the mock object.
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        the mock object.
      Throws:
        `java.lang.IllegalArgumentException` - if the name is not a valid Java identifier.

    - #### createStrictControl

          public IMocksControl createStrictControl()

      Creates a control, order checking is enabled by default.
      Returns:
        the control.

    - #### createMockBuilder

          public <T> IMockBuilder<T> createMockBuilder(java.lang.Class<T> toMock)

      Create a mock builder allowing to create a partial mock for the given class or interface.
      Type Parameters:
        `T` - the interface that the mock object should implement.
      Parameters:
        `toMock` - the class of the interface that the mock object should implement.
      Returns:
        a mock builder to create a partial mock

    - #### createControl

          public IMocksControl createControl(MockType type)

      Creates a control of the given type.
      Parameters:
        `type` - the mock type.
      Returns:
        the control.
      Since:
        3.2

    - #### createControl

          public IMocksControl createControl()

      Creates a control, order checking is disabled by default.
      Returns:
        the control.

    - #### createNiceControl

          public IMocksControl createNiceControl()

      Creates a control, order checking is disabled by default, and the mock objects created by this control will return `0`, `null` or `false` for unexpected invocations.
      Returns:
        the control.

    - #### replayAll

          public void replayAll()

      Switches all registered mock objects (more exactly: the controls of the mock objects) to replay mode. For details, see the EasyMock documentation.

    - #### resetAll

          public void resetAll()

      Resets all registered mock objects (more exactly: the controls of the mock objects). For details, see the EasyMock documentation.

    - #### verifyAll

          public void verifyAll()

      Verifies all registered mock objects (more exactly: the controls of the mock objects).

    - #### resetAllToNice

          public void resetAllToNice()

      Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with nice behavior. For details, see the EasyMock documentation.

    - #### resetAllToDefault

          public void resetAllToDefault()

      Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with default behavior. For details, see the EasyMock documentation.

    - #### resetAllToStrict

          public void resetAllToStrict()

      Resets all registered mock objects (more exactly: the controls of the mock objects) and turn them to a mock with strict behavior. For details, see the EasyMock documentation.

    - #### injectMocks

          public static void injectMocks(java.lang.Object obj)

      Inject a mock to every fields annotated with `Mock` on the class passed in parameter. Then, inject these mocks to the fields of every class annotated with `TestSubject`.

      The rules are

      - Static and final fields are ignored
      - If two mocks have the same field name, return an error
      - If a mock has a field name and no matching field is found, return an error
      Then, ignoring all fields and mocks matched by field name
      - If a mock without field name can be assigned to a field, do it. The same mock can be assigned more than once
      - If no mock can be assigned to a field, skip the field silently
      - If the mock cannot be assigned to any field, skip the mock silently
      - If two mocks can be assigned to the same field, return an error
      Fields are searched recursively on the superclasses

      Note: If the parameter extends `EasyMockSupport`, the mocks will be created using it to allow `replayAll/verifyAll` to work afterwards

      Parameters:
        `obj` - the object on which to inject mocks
      Since:
        3.2