This document discusses test-driven development (TDD) and the importance of writing tests for code. It covers the different stages of TDD, including writing failing tests, making tests pass, and refactoring code and tests. It also discusses how to add tests to legacy code and test external APIs using mocks and stubs. The overall message is that TDD helps produce better code that is modular, loosely coupled, and more reliable. Testing removes fear and helps developers learn and evolve in their skills and approach to software development.
36. User Steps Test Steps
Visit form
Leave field blank
Tuesday, April 16, 13
37. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Tuesday, April 16, 13
38. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Application
crashes
Tuesday, April 16, 13
39. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Application
crashes
New object
Tuesday, April 16, 13
40. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Application
crashes
New object
Leave field blank
Tuesday, April 16, 13
41. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Application
crashes
New object
Leave field blank
Save object
Tuesday, April 16, 13
42. User Steps Test Steps
Visit form
Leave field blank
Click “Submit”
Application
crashes
New object
Leave field blank
Save object
Test returns
exception
Tuesday, April 16, 13
44. it “returns a useful error” do
end
Tuesday, April 16, 13
45. it “returns a useful error” do
end
new_object = Object.new
Tuesday, April 16, 13
46. it “returns a useful error” do
end
new_object = Object.new
new_object.required = nil
Tuesday, April 16, 13
47. it “returns a useful error” do
end
new_object = Object.new
new_object.required = nil
new_object.save!
Tuesday, April 16, 13
48. it “returns a useful error” do
end
new_object = Object.new
new_object.required = nil
new_object.save!
new_object.errors.should include
(“Required field is blank”)
Tuesday, April 16, 13
49. Use tests to learn
legacy code
Tuesday, April 16, 13
82. it “returns the correct rate” do
tax_rate(seattle).should == .095
end
Tuesday, April 16, 13
83. it “returns the correct rate” do
tax_rate(seattle).should == .095
end
it “creates a new object” do
get :new
assigns(new_object).should_be
new_record
end
Tuesday, April 16, 13
84. it “returns the correct rate” do
tax_rate(seattle).should == .095
end
it “creates a new object” do
get :new
assigns(new_object).should_be
new_record
end
it “saves to the database” do
expect(save_method).to
change{Table.count}.by(1)
end
Tuesday, April 16, 13