CSC/ECE 517 Fall 2011/ch2 2e kt: Difference between revisions
| Line 32: | Line 32: | ||
| assert_respond_to|| assert_same|| refute_respond_to|| refute_same | | assert_respond_to|| assert_same|| refute_respond_to|| refute_same | ||
|- | |- | ||
| | | assert_output|| assert_raises|| || | ||
|- | |||
| assert_send|| assert_silent|| || | |||
|} | |} | ||
Revision as of 01:16, 18 September 2011
Overview
TDD vs BDD
Ruby Testing Frameworks
Test::Unit KH
Mini::Test TG
Evolution of Mini::Test
Although Ruby’s Test::Unit has been used for years and is a favorite (mostly due to its inclusion with the Ruby standard library), many Ruby developers felt the need for a more modern test infrastructure. This caused them to abandon Test::Unit and pull in additional test gems (e.g. rspec, shoulda, cucumber, etc.). With the new standard Mini::Test, however, this may be a thing of the past. Mini::Test was created to be small, clean and fast. Test::Unit could be rather slow and contained some little-used features, such as test cases, GUI runners and some assertions. Mini::Test provides 90% of Test::Unit that people were using as well as some additional features.
Most of the assertions in Mini::Test are the same as those in its predecessor. The major difference is in the negative assertions. In Test::Unit where you have a assert_not_something, in Mini::Test you would use refute_something. (assert_not_raise and assert_not_throws are no longer available.) Mini::Test provides the following assertions:
| assert | assert_block | refute | |
| assert_empty | assert_equal | refute_empty | refute_equal |
| assert_in_delta | assert_in_epsilon | refute_in_delta | refute_in_epsilon |
| assert_includes | assert_instance_of | refute_includes | refute_instance_of |
| assert_kind_of | assert_match | refute_kind_of | refute_match |
| assert_nil | assert_operator | refute_nil | refute_operator |
| assert_respond_to | assert_same | refute_respond_to | refute_same |
| assert_output | assert_raises | ||
| assert_send | assert_silent |
RSpec KH
Shoulda TG
Cucumber TG
Criteria
- IDE integration
- Test output detail
- Testing constructs available
- TDD or BDD
- Documentation
- Learning curve and ease of use
Framework Matrix
| Framework | Website | Documentation | IDE Integration | Type | Ease of Use |
|---|---|---|---|---|---|
| Unit::Test | |||||
| MiniTest::Unit |
Demo Code
class Account
@balance
@name
attr_accessor :balance
attr_accessor :name
def initialize(amount)
@balance = amount
end
def deposit(amount)
@balance += amount
end
def addinterest(rate)
@balance *= (1 + rate)
end
def withdrawal(amount)
@balance -= amount
end
end
Test::Unit
require "test/unit"
require_relative("../Account.rb")
class AccountTest < Test::Unit::TestCase
def test_balance
a = Account.new(100)
assert_equal(100, a.balance())
end
def test_deposit
a = Account.new(100)
assert_equal(200, a.deposit(100))
end
def test_withdrawal
a = Account.new(100)
assert_equal(50, a.withdrawal(50))
end
def test_name
a = Account.new(100)
a.name = "Checking"
assert_not_nil(a.name())
end
def test_interest
a = Account.new(100)
assert_equal(a.addinterest(0.5), 150)
end
def test_fail
a = Account.new(100)
assert_equal(a.balance(), 200)
end
end
References
[1] http://ruby-toolbox.com/categories/testing_frameworks.html