Posted By: Jim Weirich
Date: 2007-02-11 22:20
Summary: FlexMock 0.5.0
Project: Electric Calendar

= FlexMock 0.5.0 Released

FlexMock is a flexible mocking library for use in Ruby's Test::Unit
test framework. Version 0.5.0 adds the ability to automatically stub any
instance created by an existing class.

== New in 0.5.0

* flexstub(obj) will now accept a block argument in the same way that
flexmock() does.

* When stubbing Class objects, the any_instance method can be used to
automatically stub any instance object created by the class. For
example, if you wish that any Connection object created during a test
has a stubbed "send" method, you could do the following:

def test_connections
flexstub(Connection).any_instance do |new_con|
new_con.should_receive(:send).and_return(0)
end
connection = Connection.new
connection.send # This calls the stubbed version of send.
end

Only objects created during the test will be automatically stubbed.
Existing objects are unaffected.

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

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

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

-- Jim Weirich

Latest News
v13.5.0 Released !!
    id 774 - 2013-05-18 12:28
Runt v0.9.0 Released
    Matthew Lipper - 2013-05-17 00:11
kramdown 1.0.2 released
    Thomas Leitner - 2013-05-09 06:58
mime-types 1.23 Released
    Austin Ziegler - 2013-04-21 01:41
diff-lcs 1.2.4 Released
    Austin Ziegler - 2013-04-21 00:08

 

Forums | Admin

Discussion Forums: flexmock-0.5.0-released

Start New Thread Start New Thread

 

Topic Topic Starter Replies Last Post