TDD/BDD in Ruby - Chapter 2

TDD Cycle

  1. Write a test
  2. Make it run
  3. Make it right

The goal is clean code that works - Ron Jeffries

So we want to test multiplication and make sure that the "times()" method returns the right amount when passed a multiplier.


public void testMultiplication() {
  Dollar five = new Dollar(5);
  Dollar product = five.times(2);
  assertEquals(10, product.amount);
  product = five.times(3);
  assertEquals(15, product.amount);
}

Three strategies

  1. Fake It
  2. Use Obvious Implementation
  3. Triagulation

Dollar Class Code


class Dollar
  attr_reader :amount

  def initialize(aAmount)
    @amount = aAmount
  end

  def times(multiplier)
    Dollar.new(@amount * multiplier)
  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 end

RSpec Code


require 'spec'
require 'dollar.rb'

class DollarSpecification < Spec::Context
  def setup
  end

  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
end