Test driven development (TDD) involves writing tests before writing code to define requirements and ensure code meets those requirements. The presentation introduces TDD and related concepts like the red-green-refactor cycle, unit tests, integration tests, Gherkin for requirements gathering, and popular tools for TDD in different programming languages.
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
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.
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
18. ACCEPTANCE TEST DRIVEN DEVELOPMENT CYCLE
Discuss the
requirements
Distill the tests in
a friendly
format
Demo the code
Develop the
code (and
hook the code
to the tests)
19. ATDD AND THE TDD CYCLE
REFACTOR
Discuss the
requirements
Distill the tests in
a friendly
format
Demo the code
GREEN
RED
Develop the
code (and
hook the code
to the tests)
GREEN
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
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 collection’s 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 <checkout_period> days
When I open the book at day <open>
Then the book should expire in <left> days
Examples:
| 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
|laura@domain.com | Admin
|
| Sarah
|sarah@domain.com | Admin
|
| Kevin
| kevin@domain.com | 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
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
• Let’s 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
Introduction to Test Driven Development (For Both Developers and Non-Developers)Have you heard of Test Driven Development (TDD) and wondered exactly what it meant? In this talk, we'll explore the process of Test Driven Development and how it fits in with gathering user needs and requirements. If teams know how they fit together, it can be a beautiful thing. Using gherkin (written in plain English that follows a pattern) to express the user needs and app requirements, developers can then write tests that lead to code that eventually lead to improvement in the overall software development process. We will also explore some tools for various platforms that can be used in the TDD process.
Image taken from: http://onproductmanagement.net/wp-content/uploads/2010/10/why-us.jpg
This may also be known as Red-Green-Clean
Image taken from: http://2.bp.blogspot.com/_1UIyN-eAGC8/SnoFcKZ9gtI/AAAAAAAABnQ/rLOduxwJKmo/s320/point+d%27interrogation.jpg
Image taken from: http://upload.wikimedia.org/wikipedia/commons/f/fd/Light_Green_Lego_Brick.jpg
Image taken from: http://pixelperfectdigital.com/samples/NDQ0YzczNWFhODVlMw==/MjJjNzM1YWE4NWUz/photo.jpg&size=1024
Related reading: http://janetgregory.blogspot.com/2010/08/atdd-vs-bdd-vs-specification-by-example.html
This is the Discuss phase of the Discuss/Distill/Develop/Demo cycle.
Image taken from: http://2.bp.blogspot.com/-Q8TsaBzcxxg/TchwA0vS_sI/AAAAAAAAAEY/dMbBux1SukI/s320/lego+pile.jpg