Suppose we are trying to test the following application:
We might be tempted to replace logger and factory with Groovy's built-in mocks, but it turns out that Maps or Expandos are often sufficiently powerful enough in Groovy that we don't need full blown dynamic mocks for this example.
Instead of a mock for logger, we can use an Expando as follows:
Here the expected behaviour for our production code is captured within a Closure. (When using TDD, this closure would force the production code we saw in our original code to be created.)
Instead of a mock for factory, we can use a simple map as follows:
businessObj is the object we want the factory to return, though in general this could be a Closure similar to what we did for the Expando above.
Putting this altogether yields (after some refactoring) the following complete test: