class WheelTest < MiniTest::Unit::TestCase def test_calculates_diameter wheel = Wheel.new(26, 1.5) assert_in_delta(29, wheel.diameter, 0.01) end end Saturday, May 25, 2013
class WheelTest < MiniTest::Unit::TestCase def test_calculates_diameter wheel = Wheel.new(26, 1.5) assert_in_delta(29, wheel.diameter, 0.01) end end Saturday, May 25, 2013
class WheelTest < MiniTest::Unit::TestCase def test_calculates_diameter wheel = Wheel.new(26, 1.5) assert_in_delta(29, wheel.diameter, 0.01) end end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end # ... def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end # ... def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end # ... def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end # ... def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end # ... def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Wheel Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_set_cog gear = Gear.new gear.set_cog(27) assert(27, gear.cog) end end Send the message Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_set_cog gear = Gear.new gear.set_cog(27) assert(27, gear.cog) end end Assert the side effect Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_calculates_gear_inches gear = Gear.new( chainring: 52, cog: 11, wheel: Wheel.new(26, 1.5)) assert_in_delta(137.1, gear.gear_inches, 0.01) gear.expect(:ratio) gear.verify end Over Speci ed: Adds no safety yet breaks with every change Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end def gear_inches ratio * wheel.diameter end private def ratio chainring / cog.to_f end # ... end Wheel Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_calculates_gear_inches gear = Gear.new( chainring: 52, cog: 11, wheel: Wheel.new(26, 1.5)) assert_in_delta(137.1, gear.gear_inches, 0.01) gear.wheel.expect(:diameter) gear.verify end end Over Speci ed: Adds costs but not bene ts Saturday, May 25, 2013
class Gear attr_reader :chainring, :cog, :wheel def initialize(args) # ... end def set_cog(new_cog) @cog = new_cog end end Change #set_cog to add observer Saturday, May 25, 2013
class Gear # ... def set_cog(new_cog) @cog = new_cog changed @cog end def changed observer.changed(chainring, cog) end end This message MUST get sent Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Depends on the distant side effect Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Is this Gear’s responsibility? Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end Is this Gear’s responsibility? Saturday, May 25, 2013
class GearTest < MiniTest::Unit::TestCase def test_saves_changed_cog_in_db @observer = Obs.new @gear = Gear.new( chainring: 52, cog: 11, observer: @observer) @gear.set_cog(27) # assert something about the state of the db end end This is an integration test Saturday, May 25, 2013