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

[TDCSãoPaulo 2018] Como não odiar seus testes

[TDCSãoPaulo 2018] Como não odiar seus testes

Sabemos que escrever testes automatizados é extremamente importante, pois, entre outras coisas, eles garantem a qualidade do nosso código e o funcionamento da nossa aplicação. Apesar disso, muitas vezes acabamos com uma suíte de testes que, além de ser difícil de entender e manter, não é confiável. Nessa talk, vamos ver como reconhecer e evitar alguns dos problemas mais comuns que nos fazem odiar nossos testes, além de dar algumas dicas de como melhorar nossos testes.

# Links
Trilha DevTest: http://www.thedevelopersconference.com.br/tdc/2018/saopaulo/trilha-devtest

# Observações
Gifs não funcionam no speaker deck e isso me deixa muito triste, porém vida que segue

Camila Campos

July 20, 2018
Tweet

More Decks by Camila Campos

Other Decks in Programming

Transcript

  1. @camposmilaa
    como não odiar
    seus testes
    @camposmilaa

    View Slide

  2. @camposmilaa
    • Faço uns códigos na
    Creditas
    • Organizo o Rails Girls
    São Paulo
    • Organizo o Women
    Dev Summit
    • Tô no twitter como
    @camposmilaa
    CAMILA
    Campos
    @camposmilaa

    View Slide

  3. @camposmilaa
    Plataforma online
    Empréstimo com garantia
    Juros baixos pra você <3
    creditas.com.br
    @CreditasBR
    vagas.creditas.com.br

    View Slide

  4. @camposmilaa
    Projeto maravilhindo
    Inserir mulheres em TI
    Workshop de Rails
    Inspiração
    railsgirls.com.br
    fb.com/railsgirls.sp
    twitter.com/railsgirlssp

    View Slide

  5. @camposmilaa
    Inscrições Abertas!
    bit.ly/participantes-rg2018
    bit.ly/tutoras-rg2018

    View Slide

  6. @camposmilaa
    Junção de comunidades
    Oficinas
    Palestras
    Paineis
    womendevsummit.com
    @WomenDevSummit
    fb.com/womendevsummit

    View Slide

  7. @camposmilaa
    como não odiar
    seus testes
    @camposmilaa

    View Slide

  8. @camposmilaa
    como escrever testes
    que não vão nos
    deixar bolados
    @camposmilaa

    View Slide

  9. @camposmilaa
    como evitar testes que
    vão nos deixar tristes
    @camposmilaa

    View Slide

  10. @camposmilaa
    por que odiamos
    nossos testes?

    View Slide

  11. @camposmilaa
    por que escrevemos
    testes?

    View Slide

  12. @camposmilaa
    a gente gosta

    View Slide

  13. @camposmilaa
    a gente gosta

    View Slide

  14. @camposmilaa
    a gente gosta
    alta confiança

    View Slide

  15. @camposmilaa
    a gente gosta
    alta confiança
    entendimento

    View Slide

  16. @camposmilaa
    a gente gosta
    alta confiança
    entendimento

    View Slide

  17. @camposmilaa
    a gente gosta
    alta confiança
    entendimento
    funciona

    View Slide

  18. @camposmilaa
    a gente gosta
    alta confiança
    entendimento
    funciona
    facilita
    refactor

    View Slide

  19. @camposmilaa
    a gente gosta
    alta confiança
    entendimento

    View Slide

  20. @camposmilaa
    a gente gosta
    alta confiança
    entendimento
    fácil de
    usar ou
    mudar

    View Slide

  21. @camposmilaa
    a gente gosta
    alta confiança
    entendimento
    fácil de
    usar ou
    mudar
    guia
    design

    View Slide

  22. @camposmilaa
    por que odiamos
    nossos testes?

    View Slide

  23. @camposmilaa

    View Slide

  24. @camposmilaa
    lento

    View Slide

  25. @camposmilaa
    lento
    complicado

    View Slide

  26. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  27. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  28. @camposmilaa
    lento

    View Slide

  29. @camposmilaa
    lento

    View Slide

  30. @camposmilaa
    lento
    e2e
    integração
    unidade

    View Slide

  31. @camposmilaa
    lento
    end to end

    View Slide

  32. @camposmilaa
    end to end lento

    View Slide

  33. @camposmilaa
    unidade
    controller
    service model
    model
    logic object
    repository
    model
    lento

    View Slide

  34. @camposmilaa
    unidade
    o que é
    unidade?
    controller
    service model
    model
    logic object
    repository
    model
    lento

    View Slide

  35. @camposmilaa
    unidade
    controller
    service model
    model
    logic object
    repository
    model
    lento

    View Slide

  36. @camposmilaa
    unidade
    controller
    service model
    model
    logic object
    repository
    model
    lento

    View Slide

  37. @camposmilaa
    unidade
    unidade
    colaborador 2
    colaborador 1
    lento

    View Slide

  38. @camposmilaa
    unidade
    unidade
    test double 2
    test double 1
    colaborador 2
    colaborador 1
    lento

    View Slide

  39. @camposmilaa
    unidade lento

    View Slide

  40. @camposmilaa
    integração
    controller
    service model
    model
    logic object
    repository
    model
    lento

    View Slide

  41. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  42. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  43. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  44. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  45. @camposmilaa
    lento

    View Slide

  46. @camposmilaa
    unidade
    lento

    View Slide

  47. @camposmilaa
    e2e
    unidade
    lento

    View Slide

  48. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  49. @camposmilaa
    e2e
    integração
    unidade
    dados (bd)
    deps. externas
    colaboradores
    regras e
    convenções
    lento

    View Slide

  50. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  51. @camposmilaa
    complicado
    testes difíceis de ler,
    entender e/ou manter

    View Slide

  52. @camposmilaa
    complicado

    View Slide

  53. @camposmilaa
    complicado
    teste com
    lógica

    View Slide

  54. @camposmilaa
    complicado
    teste com
    lógica
    teste muito
    mágico

    View Slide

  55. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste muito
    mágico

    View Slide

  56. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  57. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  58. @camposmilaa
    teste é um código que garante que
    seu código de produção funciona
    não claro

    View Slide

  59. @camposmilaa
    teste é um código que garante que
    seu código de produção funciona
    não claro
    não testado

    View Slide

  60. @camposmilaa
    teste é um código que garante que
    seu código de produção funciona
    não claro
    não testado
    simples

    View Slide

  61. @camposmilaa
    teste é um código que garante que
    seu código de produção funciona
    não claro
    não testado
    simples legível

    View Slide

  62. @camposmilaa
    teste é um código que garante que
    seu código de produção funciona
    não claro
    não testado
    simples legível objetivo

    View Slide

  63. @camposmilaa
    não claro

    View Slide

  64. @camposmilaa
    não claro

    View Slide

  65. @camposmilaa
    não claro

    View Slide

  66. @camposmilaa
    não claro

    View Slide

  67. @camposmilaa
    não claro

    View Slide

  68. @camposmilaa
    não claro

    View Slide

  69. @camposmilaa
    não claro

    View Slide

  70. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  71. @camposmilaa
    teste só faz 3 coisas
    bagunçado

    View Slide

  72. @camposmilaa
    AJEITA o que precisa para o teste funcionar
    bagunçado

    View Slide

  73. @camposmilaa
    AJEITA o que precisa para o teste funcionar
    EXECUTA a ação que você quer testar
    bagunçado

    View Slide

  74. @camposmilaa
    AJEITA o que precisa para o teste funcionar
    EXECUTA a ação que você quer testar
    VERIFICA se aconteceu o que você esperava
    bagunçado

    View Slide

  75. @camposmilaa
    a
    a
    a
    bagunçado

    View Slide

  76. @camposmilaa
    arrange
    a
    a
    bagunçado

    View Slide

  77. @camposmilaa
    arrange
    act
    a
    bagunçado

    View Slide

  78. @camposmilaa
    arrange
    act
    assert
    bagunçado

    View Slide

  79. @camposmilaa
    arrange
    act
    assert
    bagunçado
    setup
    exercise
    verify

    View Slide

  80. @camposmilaa
    bagunçado

    View Slide

  81. @camposmilaa
    bagunçado

    View Slide

  82. @camposmilaa
    bagunçado

    View Slide

  83. @camposmilaa
    bagunçado

    View Slide

  84. @camposmilaa
    bagunçado

    View Slide

  85. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  86. @camposmilaa
    mágico

    View Slide

  87. @camposmilaa
    mágico

    View Slide

  88. @camposmilaa
    mágico

    View Slide

  89. @camposmilaa
    mágico

    View Slide

  90. @camposmilaa
    mágico

    View Slide

  91. @camposmilaa
    mágico

    View Slide

  92. @camposmilaa
    mágico

    View Slide

  93. @camposmilaa
    complicado
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  94. @camposmilaa
    muita lógica
    código real precisa ser REFATORADO

    View Slide

  95. @camposmilaa
    setup extenso/complexo
    muita lógica

    View Slide

  96. @camposmilaa
    muitas dependências
    setup extenso/complexo
    muita lógica

    View Slide

  97. @camposmilaa
    setup extenso/complexo
    muitas verificações
    muitas dependências
    muita lógica

    View Slide

  98. @camposmilaa
    setup extenso/complexo
    muitas verificações
    muitas dependências
    muitas responsabilidades
    muita lógica

    View Slide

  99. @camposmilaa
    muitas dependências
    muitas responsabilidades
    muita lógica
    setup extenso/complexo
    muitas verificações
    muitos passos de “exercise”

    View Slide

  100. @camposmilaa
    muitas dependências
    muitas responsabilidades
    interface complicada
    muita lógica
    setup extenso/complexo
    muitas verificações
    muitos passos de “exercise”

    View Slide

  101. @camposmilaa
    muitas dependências
    muitas responsabilidades
    interface complicada
    muita lógica
    setup extenso/complexo
    muitas verificações
    muitos passos de “exercise”
    inteligência no teste
    (ex. Loops, mock método privado)

    View Slide

  102. @camposmilaa
    muitas dependências
    muitas responsabilidades
    interface complicada
    código muito complexo
    muita lógica
    setup extenso/complexo
    muitas verificações
    muitos passos de “exercise”
    inteligência no teste
    (ex. Loops, mock método privado)

    View Slide

  103. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  104. @camposmilaa
    passam depois do rebuild
    desnecessário

    View Slide

  105. @camposmilaa
    passam depois do rebuild
    funcionam dependendo da ordem
    desnecessário

    View Slide

  106. @camposmilaa
    passam depois do rebuild
    funcionam dependendo da ordem
    quebram a "toa"
    desnecessário

    View Slide

  107. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário

    View Slide

  108. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    testes
    redundantes

    View Slide

  109. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    B

    View Slide

  110. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    B
    A
    B

    View Slide

  111. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    B
    A
    B
    A
    B

    View Slide

  112. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    C
    A
    B
    A
    B

    View Slide

  113. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    C
    A
    C
    A
    B

    View Slide

  114. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    C
    A
    C
    A
    C

    View Slide

  115. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    C
    A
    C
    A
    C
    mock
    pra
    tudo

    View Slide

  116. @camposmilaa
    controller
    service
    model
    logic object
    desnecessário
    A
    C
    A
    C
    A
    C
    mock
    pra
    tudo
    menos
    testes em
    camadas

    View Slide

  117. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  118. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  119. @camposmilaa
    melhor ter testes ruins do que não ter nenhum

    View Slide

  120. @camposmilaa
    melhor ter testes ruins do que não ter nenhum
    melhor não ter testes do que ter testes ruins

    View Slide

  121. @camposmilaa
    agradecida!
    in/camilacamposramos
    @camposmilaa
    bit.ly/devtest-camila

    View Slide

  122. @camposmilaa
    Links legais
    How To Stop Hating Your Test Suite - @searls na RubyConf2015
    http://blog.testdouble.com/posts/2015-11-16-how-to-stop-hating-your-tests
    Just Say No To More End-To-End Tests
    https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html
    Test Pyramid - @martinfowler https://martinfowler.com/bliki/TestPyramid.html
    Test Smells - XUnitPatterns http://xunitpatterns.com/TestSmells.html
    Test Smells - @testdouble https://github.com/testdouble/test-smells
    8 Erros Comuns Ao Escrever Testes De Unidade -
    http://www.codeatest.com/8-erros-comuns-testes-de-unidade/

    View Slide