File: flexmock-0.4.0.rdoc

# flexmock-0.4.0.rdoc

Path: | doc/releases/flexmock-0.4.0.rdoc
Last Update: | Wed Mar 24 20:53:47 +0000 2010

# FlexMock 0.4.0 Released

FlexMock is a flexible mocking library for use in Ruby‘s Test::Unit test framework. Version 0.4.0 enhances FlexMock with the ability to stub and mock methods in existing objects.

## Changes

### New Features in 0.4.0

- You can now use the flexstub(object) method to mock or stub individual methods in an existing object. The original definitions of the methods are restored at the end of a test.
- The and_return (and its alias, returns) now accepts a list of arguments and will return the values in the list one at a time for each successive call to the mocked method.
- The flexmock() method now accepts an initialization block so that a mock can be created and configured in one step without using a local variable. This is really handy when mocking factory or creation methods that in turn return a mock.

## What is FlexMock?

FlexMock is a flexible Ruby mocking library that works with Ruby‘s Test::Unit framework to create easy to use mocks.

### Features

- Easy integration with Test::Unit. Mocks created with the flexmock method are automatically verified at the end of the test.
- A fluent interface that allows mock behavior to be specified very easily.
- A "record mode" where an existing implementation can record its interaction with a mock for later validation against a new implementation.
- Easy mocking of individual methods in existing, non-mock objects.

### Example

Suppose you had a Dog object that wagged a tail when it was happy. Something like this:

      class Dog
        def initialize(a_tail)
          @tail = a_tail
        end
        def happy
          @tail.wag
        end
      end

To test the `Dog` class without a real `Tail` object (perhaps because real `Tail` objects activate servos in some robotic equipment), you can do something like this:

require ‘test/unit’ require ‘flexmock‘

      class TestDog < Test::Unit::TestCase
        include FlexMock::TestCase

        def test_dog_wags_tail_when_happy
          tail = flexmock("tail")
          tail.should_receive(:wag).once
          dog = Dog.new(tail)
          dog.happy
        end
      end

FlexMock will automatically verify that the mocked tail object received the message `wag` exactly one time. If it doesn‘t, the test will not pass.

See the FlexMock documentation at onestepback.org/software/flexmock for details on specifying arguments and return values on mocked methods, as well as a simple technique for mocking tail objects when the Dog class creates the tail objects directly.

## Availability

FlexMock is distributed with Rails, or you can make sure you have the latest version with a quick RubyGems command:

      gem install flexmock    (you may need root/admin privileges)

Otherwise, you can get it from the more traditional places:

Download: | rubyforge.org/project/showfiles.php?group_id=170

You will find documentation at: onestepback.org/software/flexmock/

[Validate]