This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
Steve (author)
Wed Jul 05 02:29:00 -0700 2006
commit d12cbe4b73001ea76523224ba4e07571b80487dd
tree 67c879732fc732f4b2fe0062fb42c118399e6683
parent f15f07951c4e91fed94411979d14ec3d855eb9d9
tree 67c879732fc732f4b2fe0062fb42c118399e6683
parent f15f07951c4e91fed94411979d14ec3d855eb9d9
mockr /
README
= Mockr
Mockr is a pure Ruby library to support the Mock Objects approach to
unit testing, and is inspired by Java's JMock.
Several other Mock Object libraries exist for Ruby. Mockr has two main
distinguishing features:
1. Support for the distinction between mocking and stubbing
2. A constraint-based mechanism for matching call parameters
MockR was initially presented by author Steve Purcell at the
2005 European Ruby Conference.
== Introduction
An instance of Mockr::Mock can be programmed with responses to
methods calls expected during the course of a unit test. At the
end of the test, the instance can verify whether its expectations
were met, signalling a test failure if they were not.
Mocks distinguish between 'expected' method calls, which trigger
test failures if they are not made, and 'stub' method calls, which
are not verified. 'Expected' calls are typically those considered
critical to the proper use of the mocked class, and 'stub' calls are
those considered more flexible in their use.
== Example
The following is an example of a set of tests written entirely using MockR
require 'test/unit'
require 'mockr'
class BurglarAlarmTest < Test::Unit::TestCase
include Mockr::TestCaseHelpers
def setup
@laser_grid, @police_link = new_mock, new_mock
@alarm = BurglarAlarm.new(@laser_grid.proxy, @police_link.proxy)
end
def test_police_station_not_contacted_if_grid_okay
@laser_grid.expects.intact?.as { true }
@alarm.check
end
def test_police_station_is_contacted_if_grid_not_okay
@laser_grid.expects.intact?.as { false }
@police_link.expects.incident("Grid breached")
@alarm.check
end
def test_police_station_warned_if_grid_down
@laser_grid.expects.intact?.as { raise IOError.new("comms down") }
@police_link.expects.warning(/down/) # A loose parameter constraint
@alarm.check
end
end
These tests would be satisfied by the following class:
## Collaborates with a LaserGrid and a PoliceStationUplink
class BurglarAlarm
def initialize(laser_grid, police_link)
@laser_grid = laser_grid
@police_link = police_link
end
def check
begin
@police_link.incident("Grid breached") unless @laser_grid.intact?
rescue
@police_link.warning("Grid down")
end
end
end
== Resources
Home page
* http://mockr.sanityinc.com/
== Copyright
Copyright (c) 2005-2006 Steve Purcell.
== Licence
MockR is distributed under the same terms as Ruby itself.









