Mockito 1.5 spies on plain objects

| by Matthew Bass Follow 0 Followers on Sep 18, 2008. Estimated reading time: 1 minute |

Mockito is a mocking framework for Java. It's very similar to EasyMock and jMock, but eliminates the need for expectations by verifying what has been called after execution. Other mocking libraries require you to record expectations before execution, which tends to result in ugly setup code.

Lack of expectations is a big win, as software developer Hamlet D'Arcy, a Mockito user, explains on his blog:

"Mockito really cleans up the unit test by not requiring expectations. Personally, I much prefer the Mockito API to the EasyMock API for that reason."

Ketan Padegaonkar at ThoughtWorks lavishes praise on Mockito's unique syntax too:

"This looks, and reads far better than the JMock syntax, and it was love at first sight; I'm test-infested now."

The 1.5 release of Mockito introduces the ability to "spy" on non-mock objects by verifying that certain methods get called on them. For example:

List list = new LinkedList();
List spy = spy(list);

Our "spy" variable now acts as a handle to the list object. It can be treated just like a mock object. For example, the size method can be stubbed out:


Normal methods can also be called and verified:


Another improvement is an alternate, more readable stubbing syntax. For example:


Can now be written as:


This is the same length as the old style, but reads more cleanly and has fewer parenthesis. In addition to doReturn(), there are also doThrow(), doAnswer(), and doNothing() expectations.

Other useful features of Mockito include:

  • Ability to mock concrete classes and interfaces
  • Custom argument matchers
  • Ordered verification
  • Clean stack traces

Getting started with Mockito is as simple as adding a JAR file to your classpath. Visit the Google Code project for installation instructions, documentation, and more code samples.

Rate this Article

Adoption Stage

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Java has it all :( by craig w

I'm excited to try this out.

Just wish Flex/AS3 had something as nice.

It's good to see proper support for Test Spies by Gerard Meszaros

For more information on the difference between Mock Objects and Test Spies (a form of Test Stub), refer to "xUnit Test Patterns - Refactoring Test Code" by Gerard Meszaros in hard-copy, Safari, or via the draft version available at .



Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

2 Discuss

Login to InfoQ to interact with what matters most to you.

Recover your password...


Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.


More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.


Stay up-to-date

Set up your notifications and don't miss out on content that matters to you