Behaviour-Driven Development

  • 3,088 views
Uploaded on

Slides from a talk to Web21C SDK team.

Slides from a talk to Web21C SDK team.

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,088
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
164
Comments
0
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Short presentation on how BDD evolved, then demo using RSpec.

Transcript

  • 1. Behaviour-Driven Development
    • Kerry Buckley
  • 2. Evolution
  • 3. Dirty Hacking
  • 4. Automated Testing
  • 5. Automated Testing class Adder def add a, b a + b end end class AdderTest < Test::Unit::TestCase def test_adder adder = Adder . new assert_equal 4 , adder.add( 2 , 2 ) assert_equal 2 , adder.add( 4 , - 2 ) end end
  • 6. Are You Really Testing Your Code? class Adder def add a, b a + b end end class AdderTest < Test::Unit::TestCase def test_adder assert_equal 4 , 2 + 2 end end
  • 7. Test-First Development
  • 8. Test-First Development Failing tests Start Done Write code Write tests
  • 9. Test-Driven Development
  • 10. Test-Driven Development Failing test Clean code All tests pass Refactor
  • 11. State-Based class DongleTest < Test::Unit::TestCase def test_wibble # Set up test inputs dongle = Dongle . new dongle.addString( &quot;foo&quot; ) dongle.addRemoteResource( &quot; http://foo.com/bar &quot; ) # Exercise functionality under test dongle.wibble! # Verify results are as expected dongle.answer.should == 42 end end
  • 12. Bottom-Up
  • 13. Behaviour-Driven Development
  • 14. Behaviour-Driven Development Verification Specification State-based Interaction-based Bottom-up Outside-in Testing tool Design tool Invention Discovery
  • 15. More Descriptive Test Names class AdderTest < Test::Unit::TestCase def test_should_add_two_positive_numbers assert_equal 4 , Adder . new .add( 2 , 2 ) end def test_should_add_a_positive_and_a_negative_number assert_equal 2 , Adder . new .add( 4 , - 2 ) end end
  • 16. Matchers describe &quot;An adder&quot; do it &quot;should add two positive numbers&quot; do Adder . new .add( 2 , 2 ).should == 4 end it &quot;should add a positive and a negative number&quot; do Adder . new .add( 4 , - 2 ).should == 2 end end
  • 17. Generated Documentation $ spec -f s adder_spec.rb An adder - should add two positive numbers - should add a positive and a negative number Finished in 0.005493 seconds 2 examples, 0 failures
  • 18. More Matcher Examples @string .should == &quot;foo&quot; @array .should_not be_empty @hash .should have_key( :foo ) @object .should be_an_instance_of String lambda { @stack .pop }.should raise_error( StackUnderflowError )
  • 19. Top-Down
  • 20. Interaction-Based
  • 21. Mock Objects
    • Stand-ins for collaborating objects
    • Mock the interface, not a specific object
    • Verify that expected calls are made
    • Not stubs!
    • For your code only!
  • 22. Classicists v Mockists
  • 23. Mock Objects Mock Mock
  • 24. Boundary Objects
  • 25. Integration Testing
  • 26. Further Reading Introducing BDD (Dan North) http: //dannorth . net/introducing-bdd BDD Introduction http: //behaviour-driven .org/Introduction Mock Roles, Not Objects (Freeman, Mackinnon, Pryce, Walnes) http://www. jmock .org/oopsla2004. pdf BDD in Ruby (Dave Astels) http: //blog . daveastels . com/files/BDD_Intro . pdf