Behaviour-Driven Development

4,425 views

Published on

Slides from a talk to Web21C SDK team.

Published in: Technology, Business
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,425
On SlideShare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
189
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • Short presentation on how BDD evolved, then demo using RSpec.
  • Behaviour-Driven Development

    1. 1. Behaviour-Driven Development <ul><li>Kerry Buckley </li></ul>
    2. 2. Evolution
    3. 3. Dirty Hacking
    4. 4. Automated Testing
    5. 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. 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. 7. Test-First Development
    8. 8. Test-First Development Failing tests Start Done Write code Write tests
    9. 9. Test-Driven Development
    10. 10. Test-Driven Development Failing test Clean code All tests pass Refactor
    11. 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. 12. Bottom-Up
    13. 13. Behaviour-Driven Development
    14. 14. Behaviour-Driven Development Verification Specification State-based Interaction-based Bottom-up Outside-in Testing tool Design tool Invention Discovery
    15. 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. 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. 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. 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. 19. Top-Down
    20. 20. Interaction-Based
    21. 21. Mock Objects <ul><li>Stand-ins for collaborating objects </li></ul><ul><li>Mock the interface, not a specific object </li></ul><ul><li>Verify that expected calls are made </li></ul><ul><li>Not stubs! </li></ul><ul><li>For your code only! </li></ul>
    22. 22. Classicists v Mockists
    23. 23. Mock Objects Mock Mock
    24. 24. Boundary Objects
    25. 25. Integration Testing
    26. 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

    ×