devroom.io/drafts/2011-02-11-narf-a-ruby-micro-test-framework.md

90 lines
2.1 KiB
Markdown
Raw Normal View History

2013-03-22 22:53:57 +00:00
---
title: "Narf: A Ruby Micro Test Framework"
kind: article
slug: narf-a-ruby-micro-test-framework
created_at: 2011-02-11
tags:
- Ruby
- Test
- testing
- bdd
- tdd
- agile
---
I'm a happy user of RSpec, Cucumber and sometimes Steak. Great tools to
write specs and features and prove my application does what it's
supposed to do. But sometimes I have the need for something more _light
weight_.
~
For example, sometimes I need to write a single ruby method. Just something
'quick' to import a file, convert some data or whatever. Being a good
citizen I want to test that method.
Using RSpec or Cucumber here just seems wrong here. So, I've implemented
my own _Ruby Micro Test Framework_: *Narf*
:::ruby
def assert(message, &block)
puts "#{"%6s" % ((yield || false) ? ' PASS' : '! FAIL')} - #{message}"
end
(Yes, that's it.)
With this simple method, added to your ruby file, you can test your
method. And example:
Let's say you're going to write a method that counts how often the word
'ruby' occurs in a given String:
:::ruby
def count_rubies(text)
# TODO
end
#--- Ruby Micro Test Framework
def assert(message, &block)
puts "#{"%6s" % ((yield || false) ? ' PASS' : '! FAIL')} - #{message}"
end
#---
#--- Tests
assert "Count zero rubies" do
count_rubies("this is Sparta!") == 0
end
assert "Count one ruby" do
count_rubies("This is one ruby") == 1
end
assert "Count one RuBy" do
count_rubies("This is one RuBy") == 1
end
Now, simple save this file and feed it to ruby:
$ ruby my_method.rb
! FAIL - Count zero rubies
! FAIL - Count one ruby
! FAIL - Count one RuBy
Now, implement your method...
:::ruby
def count_rubies(text)
text.match(/(ruby)/i).size
end
And re-run your tests:
$ ruby my_method.rb
PASS - Count zero rubies
PASS - Count one ruby
PASS - Count one RuBy
So with the addition of just a single method you can fully TDD/BDD your
single method Ruby code. Pretty need, huh?
[Need codez?][1]
[1]: http://github.com/ariejan/narf