TDD/BDD in Ruby - Chapter 3

To-Do List

$5 + 10 CHF = $10 if rate is 2:1
$5 * 2 - $10
Make "amount" private
Dollar side effects?
Money rounding?
equals()
hashCode()


public void testEquality() {
  assertTrue(new Dollar(5).equals(new Dollar(5)));
}

Dollar class

class Dollar attr_reader :amount def initialize(aAmount) @amount = aAmount end def times(multiplier) Dollar.new(@amount * multiplier) end def equals(object) @amount == object.amount end end

Test::Unit Code

require 'test/unit' require 'dollar.rb' class TestDollar < Test::Unit::TestCase def test_multiplication five = Dollar.new(5) product = five.times(2) assert_equal(10, product.amount) product = five.times(3) assert_equal(15, product.amount) end def test_equality assert_equal(true, Dollar.new(5).equals(Dollar.new(5))) assert_equal(false, Dollar.new(5).equals(Dollar.new(6))) end end

RSpec Code

require 'spec' require 'dollar.rb' class DollarSpecification < Spec::Context def multiplication five = Dollar.new(5) product = five.times(2) product.amount.should.equal 10 product = five.times(3) product.amount.should.equal 15 end def equality Dollar.new(5).equals(Dollar.new(5)).should.equal true Dollar.new(5).equals(Dollar.new(6)).should.equal false end end

Notes & Quotes

  • when we triangulate, we only generalize code when we have two examples or more