Introduction to Test Driven Development

  • View

  • Download

Embed Size (px)


An intro to Test Driven Development for Developers and Non-Developers - covering some basics of TDD and ATDD. Presented to UXPA Cleveland at OverDrive on February 27, 2014

Text of Introduction to Test Driven Development


2. AGENDA Test Driven Development What does this mean? Gathering Requirements Gherkin Tools for TDD in the Workplace 3. WHAT IS TEST DRIVEN DEVELOPMENT? 4. TEST DRIVEN DEVELOPMENT Define {something} first through a test Write the code to pass the test Verify that the test succeeds Improve upon the code and keep the test passing 5. Write the testWrite the code to pass the testImprove the code while keeping the test passingRED-GREENREFACTOR 6. EXAMPLE RUBY KOANS 7. EXAMPLE RUBY KOANS 8. TDD CONCEPT - ASSERTIONS Verify whether a certain condition has been met Asserts come in many forms: (Not) Equal Contains / Any Is a Type Is an Instance of a Type Is (Not) Null Is (True/False) Design Guideline One assert per test 9. TDD CONCEPT ARRANGE/ACT/ASSERT Pattern for arranging a test 1. Arrange all preconditions and inputs. 2. Act on the object or method.3. Assert that the results have occurred. 10. TEST-DRIVEN TYPES OF TESTS Tests, Tests, and More Tests Oh My! 11. TYPES OF TESTS Unit Tests Integration Tests End-to-End Tests Exploratory Testing 12. UNIT TESTS Focus on a class or a method Tests the smallest unit possible Typically tests simple objects; does not test things such as: Database communication Network communication File system manipulation 13. INTEGRATION TESTS Tests functions, does things Tests interactions with the outside world, include: Database communication Network communication File system manipulation Focused integration tests isolate the testing to one interaction at a time Integration tests should run on their own, with a little help from 2 fundamental units: Setup run at the beginning of the test to set up the test environment Tear-down run at the end of the test or upon error to clean up the test environment 14. END-TO-END TESTS The most brittle of tests dependent on the big picture Verifies that the unit tests and integration tests are working like they should Start at the beginning and go through the whole process Includes: Acceptance testing Functional testing 15. EXPLORATORY TESTING Not an automated process; manual testing Sometimes better to go this route rather than end-to-end tests depending on the design and architecture of your application EXPLORE! Discovery Investigation Learning 16. MORE *-DRIVEN DEVELOPMENT Related philosophies and methodologies 17. OTHER RELATED *-DRIVEN DEVELOPMENT Behavior Driven Development Acceptance Test Driven Development Specification by Example 18. ACCEPTANCE TEST DRIVEN DEVELOPMENT CYCLE Discuss the requirementsDistill the tests in a friendly formatDemo the codeDevelop the code (and hook the code to the tests) 19. ATDD AND THE TDD CYCLEREFACTORDiscuss the requirementsDistill the tests in a friendly formatDemo the codeGREENREDDevelop the code (and hook the code to the tests)GREEN 20. GATHERING REQUIREMENTS The Importance of TDD & ATDD for the UX Realm and an Intro to Gherkin 21. DISCUSS Conducted by all who are involved: Product owners Business analysts Developers QA Requirements are explicitly spelled out. Include use cases. Include required behaviors or designs. 22. GHERKIN Common language for gathering requirements Written in plain English following a particular cadence Can then be hooked up to various programming languages and testing tools Serves as guidelines for automated tests as well as project documentation 23. GHERKIN COMPONENTS Features Scenarios & Scenario Outlines Backgrounds Steps Multiline Arguments Tags 24. FEATURES Define a feature of an application Starts with the Feature keyword and contains a few lines to define the feature Example:Feature: Short, concise, descriptive text of the goal In order to do something As someone related to this system I want to gain something out of this * Features are stored in a *.feature file 25. FEATURE EXAMPLE Feature: Checking out books In order to read eBooks on my eBook reader, As a library patron, I want to check out eBooks. 26. SCENARIOS Possibilities of situations (scenarios) that apply to a feature Scenarios are included in *.feature files with their relevant feature Created with one or more steps 27. SCENARIO EXAMPLE Scenario: Checking out a book Given the library collection has the book I want to check out When I check out the book Then the library collections available count is reduced by 1 28. STEPS Given a certain given condition When a certain behavior happens Then a certain outcome is expected Additional keywords include But and And Given a certain given condition And another given condition When a certain behavior happens Then a certain outcome is expected 29. SCENARIO OUTLINES Scenario Outlines eliminate the need for copying and pasting like scenarios and collapsing values into variables. Rather than starting with Scenario, it starts with Scenario Outline. Variables (placeholders) are denoted with names sandwiched in greaterthan and less-than symbols. 30. SCENARIO OUTLINE EXAMPLE Scenario Outline: Checking book checkout expiration Given a checkout period of days When I open the book at day Then the book should expire in daysExamples: | checkout_period | open| left ||7|2|5|| 14| 10|2|| 21| 18|3| 31. MULTILINE ARGUMENTS Tables Example: Scenario: Given the following accounts exist: |name |email |account_type| | Laura | | Admin | | Sarah | | Admin | | Kevin | | User | 32. MULTILINE ARGUMENTS Large paragraph of text Example: Scenario: Given a description search with: """ It was the best of times It was the worst of times """ 33. BACKGROUNDS Backgrounds setup the environment for all scenarios in a feature file. Starts with the Background keyword and is typically made up of Given, And, and But clauses Runs before individual scenario setup routines 34. BACKGROUND EXAMPLE Feature: Checkout eMaterials Background: Given a customer named Sarah Dutkiewicz And a library card numbered 12345678901 And a checkout queue of books: | title| author|| Hop on Pop| Dr. Seuss|| Harold and the Purple Crayon| Crockett Johnson || Shark Tales: How I Turned $1,000 into a Billion Dollar Business | Barbara Corcoran| 35. TAGS Used for grouping like tests, scenarios, and/or features together Starts with a @, followed by the tag name Examples:@UI @accounting @security Many test runners support tags and allow collections of tests to be run by tag 36. TOOLS FOR TDD IN THE WORKPLACE 37. GHERKIN LANGUAGE RESOURCES AND GENERAL TDD RESOURCES Behat Writing Features Gherkin Language The Art of Agile Development: Test-Driven Development Test first != TDD Driving Development with Tests: ATDD and TDD Lets Explore Exploratory Testing 38. .NET TDD RESOURCES SpecFlow Behavior Driven Development, Acceptance Test Driven Development, Specification by Example; includes support for Silverlight, Windows Phone, and Mono TestDriven.Net Visual Studio integration for unit tests WatiN Web Application Testing in .NET TestStack.White UI automation testing Telerik Test Studio Nunit MbUnit MSTest NCover TypeMock 39. JAVASCRIPT TDD RESOURCES QUnit Jasmine Zombie.js Mocha Tutti JSTestDriver jsUnity CasperJS 40. RUBY TDD RESOURCES Cucumber behavior driven development Watir Web Application Testing in Ruby Ruby Koans learn Ruby via testing Rspec primary Ruby testing tool 41. PHP TDD RESOURCES Behat behavior driven development Mink web acceptance testing PHPUnit SimpleTest Phpt Gouette headless browser, web scraper 42. JAVA TDD RESOURCES JUnit Watij Web Application Testing in Java AppPerfect Java Unit Test 43. ADDITIONAL *DD RESOURCES Sahi JavaScript browser controller Selenium supports C#, Java, Perl, PHP, Python, Ruby Fitnesse supports multiple languages Windmill supports Python, JavaScript, Ruby Canoo WebTest supports Python, JavaScript TSQLUnit TDD for Transact-SQL TST the T-SQL Test Tool 44. CONTACT INFORMATION Sarah Dutkiewicz Cleveland Tech Consulting, Twitter: @sadukie Blog: