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

Love your tests

Tuenti
November 27, 2015

Love your tests

Testing practices and principles used at .Tuenti in order to get better tests and make them easier to write and read.

Tuenti

November 27, 2015
Tweet

More Decks by Tuenti

Other Decks in Technology

Transcript

  1. Love your tests
    @KINISOFTWARE
    MADRID · NOV 27-28 · 2015

    View Slide

  2. .Love your tests
    (Story of a healthy addiction - Chapter 2)
    kinisoftware [email protected]

    View Slide

  3. View Slide

  4. View Slide

  5. We are
    hiring!!

    View Slide

  6. Once upon a time…
    2013
    1

    View Slide

  7. .Tuenti <3 .Testing
    (Story of a healthy addiction - Chapter 1)

    View Slide

  8. • We <3 our customers
    • Confidence
    • Safety Net
    • Refactoring, refactoring, refactoring
    • It is professional, guys :)

    View Slide

  9. By
    Martin Fowler

    View Slide

  10. Testability

    View Slide

  11. Present day…
    2

    View Slide

  12. Good
    good

    View Slide

  13. “It’s overwhelmingly easy to write bad
    unit tests that add very little value to a
    project while inflating the cost of code
    changes astronomically.”

    View Slide

  14. • Code coverage != Test quality
    • Don’t Repeat Yourself (Globally)
    • Mocks, mocks everywhere
    • Test smells

    View Slide

  15. .Tuenti
    Subject Under Test
    3

    View Slide

  16. Microservices
    Fresh start
    Java
    Focus on testability

    View Slide

  17. Talk is cheap.
    Show me the code.

    View Slide

  18. Coding time (1446 tests)
    •Code readability + Naming + Code structure + DSL
    • One (logical) assert per test + Meaningful asserts + Custom
    matchers
    • Exceptions
    • Builders + Mothers
    • Mock providers
    • Testing real things
    • Customize your runners + DI

    View Slide

  19. Code readability + Naming + Code
    structure + DSL
    • Unit & Integration folders
    • Tests names
    • AAA
    • @SetUp vs Explicit SetUpTM
    • DSL

    View Slide

  20. • Unit & Integration folders

    View Slide

  21. View Slide

  22. View Slide

  23. View Slide

  24. Code readability + Naming + Code
    structure + DSL
    • Tests names

    View Slide

  25. View Slide

  26. Code readability + Naming + Code
    structure + DSL
    • AAA

    View Slide

  27. View Slide

  28. Code readability + Naming + Code
    structure + DSL
    • @SetUp vs Explicit SetUpTM

    View Slide

  29. Code readability + Naming + Code
    structure + DSL

    View Slide

  30. Code readability + Naming + Code
    structure + DSL
    • DSL

    View Slide

  31. View Slide

  32. One (logical) assert per test +
    Meaningful asserts + Custom matchers
    • Assert Equals vs Assert That
    • Actual & Expected
    • One (logical) assert per test
    • Hamcrest & Assert J
    • Custom matchers

    View Slide

  33. • Assert Equals vs Assert That / Actual & Expected
    One (logical) assert per test +
    Meaningful asserts + Custom matchers

    View Slide

  34. One (logical) assert per test +
    Meaningful asserts + Custom matchers
    • One (logical) assert per test

    View Slide

  35. View Slide

  36. View Slide

  37. One (logical) assert per test +
    Meaningful asserts + Custom matchers
    • Hamcrest

    View Slide

  38. • Assert J

    View Slide

  39. One (logical) assert per test +
    Meaningful asserts + Custom matchers
    • Custom matchers

    View Slide

  40. View Slide

  41. Exceptions
    • Try/Catch… really?
    • @Test(expected = ….)
    • @Rule ExpectedException

    View Slide

  42. Exceptions
    • @Test(expected = ….)
    • @Rule ExpectedException

    View Slide

  43. Builders + Mothers
    • Value Objects are leaf in our classes tree == No mocks here please
    • Building value objects “issue”
    • Builders
    • Mothers
    • Builders + Mothers

    View Slide

  44. Builders + Mothers
    • Builders

    View Slide

  45. Builders + Mothers

    View Slide

  46. Mock providers
    • DRY using mocks globally
    • DSL
    • Builders + Mocks = Mocks providers

    View Slide

  47. View Slide

  48. Testing using real things
    • Mocks, mocks everywhere
    • Sociable Unit Tests
    • Local resources
    • Helper & Utility classes

    View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. Testing using real things
    • Helper & Utility classes

    View Slide

  53. Customize your runners + DI
    • JUnit @RunWith + your platform
    • SetUp and TearDown for expensive resources
    • DI container and “integration mocks”

    View Slide

  54. Customize your runners + DI
    • JUnit @RunWith + your platform

    View Slide

  55. View Slide

  56. Customize your runners + DI
    • SetUp and TearDown for expensive resources

    View Slide

  57. Customize your runners + DI
    • SetUp and TearDown for expensive resources

    View Slide

  58. Customize your runners + DI

    View Slide

  59. .Thanks!

    View Slide

  60. View Slide

  61. • Mix JVM Languages (Groovy&Scala rule!)
    • Java 8 fuck yeah!
    • JUnit Lambda
    • Property-based testing
    • Mutation Testing
    Keep an eye on…

    View Slide

  62. Reading a lot
    • Effective Unit Testing
    • WEWUT
    • Pragmatic Unit Testing with JUnit
    • GOOS
    • The Art of Unit Testing
    • JUnit in Action
    • xUnit Patterns
    • Refactoring

    View Slide