MacSpec
MacSpec is a (yet) feature minimal RSpec clone that is specifically built to work with MacRuby. It is built ontop of MiniTest that ships with MacRuby and works out of the box with the MacRuby App Template for Xcode. All you have to do is to replace two lines of code and start writing your tests. No special command for running tests required. Just set your active Target to Test and hit Cmd-B.
MacSpec ships with a testing framework similar to RSpec’s.
The matchy matcher system is built in. (-> github.com/jm/matchy)
Even a mocking framework is built in.
Install
$sudo macgem install MacSpec
Use
For Starters:
Create a brandnew MacRuby Application with the Xcode template that ships with MacRuby. (Btw Have you installed MacRuby-0.5 already? www.macruby.org/downloads.html )
Open the stub_test.rb file that is located inside the Tests group and replace the content with:
require "rubygems"
require "MacSpec"
describe "MacSpec TestCase" do
before do
# This gets executed before each test. (Like setup)
# Instance variables that are declared
# inside this block will be handed down to all
# tests.
@obj = Object.new
end
after do
# you guess it!
end
it "should work!" do
# this is the body of a test
@obj.should_receive(:hello).with("object").and_return("Hello MacSpec")
@obj.hello("object").should == "Hello MacSpec"
end
describe "Nested TestCase" do
it "has access to the stuff that has been defined in the outer before blocks" do
@obj.stub!(:some_method)
lambda {@obj.some_method}.should_not raise_error
end
end
end
Now set the active target to ‘Unit Tests’ and hit Cmd-B.
Philosophy
The highest priority feature will always be MacRuby compatibility. We will expand MacSpec’s feature set towards RSpec’s feature set step by step.
Features
Lots of matchers
A testing framework
With nested describe blocks, chained setup and teardown, fit and xit, shared_example_groups
A mock framework
With mock objects, method stubs and method expectations (aka partials)
Copyright
Copyright © 2010 Matthias Hennemeyer. See LICENSE for details. matchy is © 2008 Jeremy McAnally