With Ruby 1.9, MiniTest entered standard lib.
MiniTest is pretty small and readable, here are all source files:
lib:
hoe minitest
lib/hoe:
minitest.rb
lib/minitest:
autorun.rb benchmark.rb hell.rb mock.rb parallel_each.rb pride.rb spec.rb unit.rb
Assert Methods
See Minitest::Assertions doc or unit.rb source
assert assert_equal assert_raises
capture_io
refute refute_empty
...
Specs Expections
See Minitest::Expectations doc or spec.rb source
must_be must_be_close_to
wont_be_empty
...
Most methods just redirect to assert methods internally.
Simple Start
Given that you’d like to test the following class:
class Meme
def i_can_has_cheezburger?
"OHAI!"
end
def will_it_blend?
"YES!"
end
end
Unit tests
require 'minitest/autorun'
class TestMeme < MiniTest::Unit::TestCase
def setup
@meme = Meme.new
end
def test_that_kitty_can_eat
assert_equal "OHAI!", @meme.i_can_has_cheezburger?
end
def test_that_it_will_not_blend
refute_match /^no/i, @meme.will_it_blend?
end
def test_that_will_be_skipped
skip "test this later"
end
end
Specs
# require 'minitest/unit'
# require 'minitest/spec'
# require 'minitest/mock'
require 'minitest/autorun'
describe Meme do
before do
@meme = Meme.new
end
describe "when asked about cheeseburgers" do
it "must respond positively" do
@meme.i_can_has_cheezburger?.must_equal "OHAI!"
end
end
describe "when asked about blending possibilities" do
it "won't say no" do
@meme.will_it_blend?.wont_match /^no/i
end
end
end