# \[ANN\] FlexMock 0.4.0 Released

**URL:** <https://www.ruby-forum.com/t/ann-flexmock-0-4-0-released/67546>\
**Category:** Ruby\
**Created:** [September 5, 2006, 4:27am UTC](https://www.ruby-forum.com/t/ann-flexmock-0-4-0-released/67546 "2006-09-05T04:27:58Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jimweirich](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/ce73a5/32.png) [@jimweirich](https://www.ruby-forum.com/u/jimweirich)\
**Post date:** [September 5, 2006, 4:27am UTC](https://www.ruby-forum.com/t/ann-flexmock-0-4-0-released/67546/1 "2006-09-05T04:27:58Z")

</div>

= 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.

== 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  
[http://onestepback.org/software/flexmock](http://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:: [http://rubyforge.org/project/showfiles.php?group\_id=170](http://rubyforge.org/project/showfiles.php?group_id=170)

You will find documentation at:  
[http://onestepback.org/software/flexmock/](http://onestepback.org/software/flexmock/)

– Jim W.
