Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Test-driven development with PHPUnit

Test-driven development with PHPUnit

Oliver Klee

June 23, 2018
Tweet

More Decks by Oliver Klee

Other Decks in Technology

Transcript

  1. Test-driven 

    Development

    with PHPUnit
    Oliver Klee, 2018-06
    @oliklee [email protected]

    View Slide

  2. This is Oliver Klee (me!)
    Workshop teacher
    •unit testing
    •extension development
    •software quality
    •saying „no“, consent culture
    TYPO3 extension

    developer
    (wanna-be)

    singer
    @oliklee
    oliverklee
    oliverklee.de

    View Slide

  3. unterstand TDD become test-infected have fun
    Workshop goals

    View Slide

  4. Workshop
    Rules

    View Slide

  5. Stand up

    for your tests

    View Slide

  6. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  7. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  8. Unit

    Tests?

    View Slide

  9. Manual testing is cumbersome

    View Slide

  10. Automated

    testing

    is fast

    View Slide

  11. Unit tests for the

    TYPO3 Core

    View Slide

  12. > 4400 tests

    View Slide

  13. < 14 seconds

    View Slide

  14. Verify that your code
    does what you expect

    View Slide

  15. Make sure that

    your changes won‘t

    break anything

    View Slide

  16. Keep others

    from breaking your code

    View Slide

  17. Don’t break anything

    even in complex

    projects

    View Slide

  18. Create a safety net
    for refactoring
    or for

    TYPO3 updates

    View Slide

  19. Improve
    the structure
    of your code

    View Slide

  20. Green feels good!

    View Slide

  21. https://github.com/oliverklee/tdd-reader

    /Exercises/tdd-exercises-en.md

    View Slide

  22. Let’s get

    some terms

    straight

    View Slide

  23. The two programming modes
    clean
    hacky

    View Slide

  24. Testsuite
    Testcase
    Test
    Assertion
    Test
    Test
    Testcase

    View Slide

  25. The life cycle of a test
    new FooTest();
    setUp();
    /** @test */
    lifeIsGood();
    tearDown();

    View Slide

  26. 4 test phases
    set up
    setUp()

    code in the test method
    exercise method call
    verify assert…()
    tear down tearDown()

    View Slide

  27. Code test-first
    write

    test
    write

    code
    refactor

    View Slide

  28. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  29. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  30. View Slide

  31. https://github.com/oliverklee/tdd-reader

    /Exercises/tdd-exercises-en.md

    View Slide

  32. Test levels
    http://filipdefar.com/2015/06/tested-be-thy-name.html

    View Slide

  33. Unit tests are
    small and fast

    View Slide

  34. Integration tests
    test how components
    work together
    in TYPO3:

    „functional tests“

    View Slide

  35. Systemtests test
    the big picture

    View Slide

  36. Test types

    View Slide

  37. Blackbox tests
    test
    the public API

    View Slide

  38. Whitebox tests
    inner workings
    test the

    View Slide

  39. Functional

    tests

    View Slide

  40. Acceptance tests
    Selenium
    Codeception

    View Slide

  41. Anti-

    zombie
    tests-

    View Slide

  42. Regression tests

    View Slide

  43. Smoke tests

    View Slide

  44. Smoke tests

    View Slide

  45. Story tests for
    Behavior-driven development
    (BDD)
    Behat
    Codeception

    View Slide

  46. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  47. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  48. Naming

    Tests

    View Slide

  49. Use meaningful test names
    classCanBeInstantiated
    setTitleSetsTitle
    setSizeWithZeroThrowsException
    hasTitleForEmptyTitleReturnsFalse
    Name the
    behavior.
    Name the
    preconditions.
    Name the
    method.
    Don’t use

    “works” or

    “works correctly”.
    measureFrubbleWorksCorrectly

    View Slide

  50. View Slide

  51. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  52. Workshop roadmap
    1. Terms & concepts 2. Testing patterns
    3. Naming things 4. Code katas

    View Slide

  53. View Slide