7.3. Mock Testing

Mock object testing involves the use of fake objects as stand-ins for your real objects to support automated testing. Traditionally, this technique allows testing in systems involving databases, network connections, or some other relationship that would be difficult or impossible to set up for real in the test context. Over time, the technique has also proven useful in helping to verify program behavior and to focus testing.

Mock testing is one of those areas where anyone who has put together a toolkit has come up with a slightly different naming structure than everybody else. I'm following Martin Fowler's usage from the article "Mocks Aren't Stubs" (see the "References" section at the end of the chapter). Much like a stunt double, a test double is any object used as a stand-in for the real thing during testing. A stub is a fake object or method set up during the test to return a preset value without performing the real calculation. A mock is also set up to return a preset value, but a true mock has the additional capability to track what calls have been made to the mock object and, more importantly, to automatically validate that the calls match expectations that are created during test setup.

Now, the wonderful thing about doing mock object testing in Rails is that the mock tools can leverage the extensive Rails metaprogramming capabilities to turn ordinary, preexisting objects and classes into stubs or mocks. This is in contrast to, say, the Java mock object ...

Get Professional Ruby on Rails™ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.