Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Suppose we have the following Java interface (and we are only using interfaces because we want to demonstrate using Groovy to test Java using Mocks later):

Now suppose we have an implementation method as follows:

For numbers, the reverse() method will negate them. Thanks to duck-typing, other objects that we try to reverse will just call their respective types reverse() method if it exists, e.g. so it will work for String and List objects.

Now suppose we make use of a reverser in some code we are trying to test.

Integration Testing

We can integration test this class as follows:

The above tests our class under test with the production reverser in place. For this particular example, we might argue that such a test is appropriate and sufficient. However, in more complicated scenarions, the dependent collaboration class (GroovyReverser in this case) might be difficult or expensive to construct. In those cases, we would want to replace it with a mock or stub. See Groovy Mocks for a definition of terms.

Using Groovy's Built-in Mocking capabilities

Here is how we would use Groovy's built-in mock support to test our class under test in isolation:

Note that we didn't need to do anything to inject our mocks into the class under test. Inside the use method, all attempts to create a GroovyReverser object will be replaced by a mock object. This also works for Java objects created by Groovy objects, as the following shows:

Here JavaReverser is a class that we have defined as follows:

Hmmm. Quite a bit longer than the Groovy version. Bit we digress.

Unfortunately, this mock approach doesn't allow us to test Java classes as it relies on hooking into Groovy's object lifecycle mechanisms.

Consider now the following Java class:

To test this, we can use any of the available Java mocking packages as shown in the examples that follow.

Using EasyMock

Here is how we can test the class using EasyMock:

Using RMock

Here is how we can test the class using RMock:

Using JMock

Here is how we can test the class using JMock:

Using JDummy

JDummy is a thin API which sits above JMock. It allows very succinct expectation setting code when the expectation code would normally involve many stubs. Our example is so simple, that its power is not illustrated.

Here is how we can test the class using JDummy:

  • No labels