From: Jim Weirich Date: 2006-09-05T11:28:17+09:00 Subject: [ANN] FlexMock 0.4.0 Released = 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 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 You will find documentation at: http://onestepback.org/software/flexmock/ -- Jim Weirich -- Posted via http://www.ruby-forum.com/.