TDD (with FLOW3)
  Karsten Dambekalns <karsten@typo3.org>
      Robert Lemke <robert@typo3.org>




                      ...
What?
   Why?
  How?
Integrate!
             Inspiring people to
             share
Test first,
  code later
Test first, code later
  Write tests for all your code

 •   New features come with a test

 •   Bugfixes come with a test

...
Unit tests
  Unit tests are small programs that test your code

  They check

 •   the result of methods against expected ...
Good tests
 Should be...

 •   automated

 •   self-contained

 •   repeatable

 •   thorough

 •   small

 •   talk about...
Unit tests
  Unit tests are usually run with a test runner

  The xUnit family is most widespread

  PHPUnit does the job ...
Tests aren’t
   the goal
But you said...
They make you feel good
They make you feel good
  The tests make you

 •   focus on your task

 •   code exactly what you need

 •   think from th...
Reasons for TDD
 Feel more comfortable

 •   Build confidence in your code

 •   Reduce fear of change

 (Good) tests are (...
D for Design
 Writing tests first is likely to improve your code

 Constant refactoring keeps code clean

 Unit testing ens...
TDD in Practice

            Inspiring people to
            share
The Mantra




             Inspiring people to
             share
The Mantra
           Design



   Test                 Test




          Implement



                      Inspiring pe...
More testing
 Sometimes you need to test interaction with external systems,
 like database access

 A test should be small...
Mocks & stubs
 Mock objects allow you to use fake objects instead of real
 implementations

 Stubs can be used to return h...
Saving in TYPO3CR
 Assumptions / Background

 •   The Session object has a save() method

 •   It uses a Storage_Backend i...
No FLOW3?
 No TDD!
No TDD without FLOW3
 Without Dependency Injection you cannot really do unit testing




                                 ...
Dependencies
 Problem: Classes explicitly refer to other classes:




                                                    ...
Dependencies
 Try to test this class:




                           Inspiring people to
                           share
Dependencies
 Unit Testing: You want to test a small unit

 You don't want to test

 •   The Simple File Logger

 •   The ...
Dependencies
 Unit Testing: You want to test a small unit

 You want to test

 •   if the action returns a string represen...
Dependency Injection
 A class doesn't ask for the instance of another class but gets it
 injected

 This methodology is re...
Questions!
Links & Literature
   Test-Driven Development By Example
   Kent Beck, Addison-Wesley


   Continuous Integration – Improv...
Links & Literature
  FLOW3
  http://flow3.typo3.org/

  PHPUnit
  http://www.phpunit.de/

  Hudson CI-Server
  https://huds...
TDD (with FLOW3)
TDD (with FLOW3)
Upcoming SlideShare
Loading in...5
×

TDD (with FLOW3)

1,333

Published on

An introduction to Test-Driven Development using FLOW given at the TYPO3 University in Annecy, France in May 2008.

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,333
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

TDD (with FLOW3)

  1. 1. TDD (with FLOW3) Karsten Dambekalns <karsten@typo3.org> Robert Lemke <robert@typo3.org> Inspiring people to share
  2. 2. What? Why? How? Integrate! Inspiring people to share
  3. 3. Test first, code later
  4. 4. Test first, code later Write tests for all your code • New features come with a test • Bugfixes come with a test Write tests before your code • Adding a feature means adding a test first • Fixing a bug means writing a test first Inspiring people to share
  5. 5. Unit tests Unit tests are small programs that test your code They check • the result of methods against expected values • whether methods are (not) called as expected A test should • be well-named • check only one assertion Inspiring people to share
  6. 6. Good tests Should be... • automated • self-contained • repeatable • thorough • small • talk about the domain Inspiring people to share
  7. 7. Unit tests Unit tests are usually run with a test runner The xUnit family is most widespread PHPUnit does the job for PHP Inspiring people to share
  8. 8. Tests aren’t the goal
  9. 9. But you said...
  10. 10. They make you feel good
  11. 11. They make you feel good The tests make you • focus on your task • code exactly what you need • think from the outside • a better programmer* So what the tests do for you is the key * decoupling helps with testing, decoupled code is easier to maintain, easier is better - q.e.d. Inspiring people to share
  12. 12. Reasons for TDD Feel more comfortable • Build confidence in your code • Reduce fear of change (Good) tests are (good) documentation Acts as safety net • Regression testing built in • Helps with refactoring Inspiring people to share
  13. 13. D for Design Writing tests first is likely to improve your code Constant refactoring keeps code clean Unit testing ensure decoupling You only code what is really needed Inspiring people to share
  14. 14. TDD in Practice Inspiring people to share
  15. 15. The Mantra Inspiring people to share
  16. 16. The Mantra Design Test Test Implement Inspiring people to share
  17. 17. More testing Sometimes you need to test interaction with external systems, like database access A test should be small, encapsulated, stand-alone So how do you test database access? Inspiring people to share
  18. 18. Mocks & stubs Mock objects allow you to use fake objects instead of real implementations Stubs can be used to return hard-coded results Using them is actually (somewhat) easy with PHPUnit Inspiring people to share
  19. 19. Saving in TYPO3CR Assumptions / Background • The Session object has a save() method • It uses a Storage_Backend implementation to do the work • That implementation has methods like addNode(), updateNode() and deleteNode() You need to make sure those are used when calling save() Inspiring people to share
  20. 20. No FLOW3? No TDD!
  21. 21. No TDD without FLOW3 Without Dependency Injection you cannot really do unit testing Inspiring people to share
  22. 22. Dependencies Problem: Classes explicitly refer to other classes: Inspiring people to share
  23. 23. Dependencies Try to test this class: Inspiring people to share
  24. 24. Dependencies Unit Testing: You want to test a small unit You don't want to test • The Simple File Logger • The Card Repository Inspiring people to share
  25. 25. Dependencies Unit Testing: You want to test a small unit You want to test • if the action returns a string representation of the random card it gets from the repository Inspiring people to share
  26. 26. Dependency Injection A class doesn't ask for the instance of another class but gets it injected This methodology is referred to as the quot;Hollywood Principlequot;: quot;Don't call us, we'll call youquot; Enforces loose coupling and high cohesion Allows you to mock collaborators Makes you a better programmer Inspiring people to share
  27. 27. Questions!
  28. 28. Links & Literature Test-Driven Development By Example Kent Beck, Addison-Wesley Continuous Integration – Improving Software Quality and Reducing Risk Paul M. Duvall, Addison-Wesley xUnit Test Patterns – Refactoring Test Code Gerard Meszaros, Addison-Wesley Inspiring people to share
  29. 29. Links & Literature FLOW3 http://flow3.typo3.org/ PHPUnit http://www.phpunit.de/ Hudson CI-Server https://hudson.dev.java.net/ TYPO3 Forge http://forge.typo3.org/ Inspiring people to share
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×