Mock objects areused to assist (typically unit) testing of classes in isolation.
The Groovy Mock resides in the
groovy.mock.interceptor package. It is an all-groovy mock testing library.
In principle, it is used like this:
Groovy Mocks were inspired by EasyMock.
Find background information about Mocks and endo-testing under XP2000 conference paper.
For an extended example, see Using Testing Frameworks with Groovy
- typical mock style of failing early
- mocks instance and class methods
- mocks final methods and final Collaborators
- mocks Groovy and Java Collaborators (but Caller must be groovy)
- can mock all objects of a given class (or a single Groovy object)
- mocks even if Collaborator cannot be injected into the Caller
- mocks even if Collaborator is not accessible on the Caller (no getter)
- demanded calls specified via recording calls on the Demand object (EasyMock style).
- cardinality specified as Ranges, default is
1..1; 'optional' can be achieved with
- behavior specified via Closures, allowing static or calculated return values, throwing exceptions, asserting argument values, etc. (even tricky sequence constraints by sharing state in the testMethod scope between the behavior Closures)
- matching parameter list specified via Closure's parameter list, supporting typed or untyped params, default params, and varargs.
- not dependent on any external mock library
For an extensive list of usages see the unit tests that show how to use the mock package.
Some tests to demonstrate how to use the MockFor class.
Some tests to demonstrate how to use the StubFor class.
MockFor and StubFor can not be used to test statically compiled classes e.g classes that use @CompileStatic. To stub/mock these classes you can use Spock or one of the java mocking libraries.