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

[TDCFloripa 2018] Como não escrever seus testes

[TDCFloripa 2018] Como não escrever 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/florianopolis/trilha-devtest
Vídeo disponível em: https://www.eventials.com/Globalcode/tdc-floripa-2018-stadium-sexta-3/

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

Camila Campos

April 20, 2018
Tweet

More Decks by Camila Campos

Other Decks in Programming

Transcript

  1. @camposmilaa
    como não escrever seus testes
    Trilha #DevTest
    Camila Campos
    @camposmilaa

    View Slide

  2. @camposmilaa
    camila campos
    Desenvolvedora na Creditas
    Organizadora do Rails Girls
    Organizadora do Women Dev Summit

    View Slide

  3. @camposmilaa
    Plataforma online
    Empréstimo com garantia
    Juros baixos pra você <3
    !!! TAMO CONTRATANDO !!!

    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
    Junção de comunidades
    Oficinas
    Palestras
    Paineis
    womendevsummit.com
    @WomenDevSummit
    fb.com/womendevsummit

    View Slide

  6. @camposmilaa
    como não escrever seus testes
    Trilha #DevTest
    Camila Campos
    @camposmilaa

    View Slide

  7. @camposmilaa
    como evitar de fazer testes
    que vão nos deixar tristes
    Trilha #DevTest
    Camila Campos
    @camposmilaa

    View Slide

  8. @camposmilaa
    só não fazer teste!

    View Slide

  9. @camposmilaa
    por que escrevemos testes?

    View Slide

  10. @camposmilaa
    a gente gosta

    View Slide

  11. @camposmilaa
    a gente gosta

    View Slide

  12. @camposmilaa
    a gente gosta
    alta confiança

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. @camposmilaa
    por que odiamos nossos testes?

    View Slide

  21. @camposmilaa

    View Slide

  22. @camposmilaa
    lento

    View Slide

  23. @camposmilaa
    lento
    desnecessário

    View Slide

  24. @camposmilaa
    lento
    desnecessário
    complicado

    View Slide

  25. @camposmilaa
    lento
    desnecessário
    complicado

    View Slide

  26. @camposmilaa
    lento

    View Slide

  27. @camposmilaa
    lento

    View Slide

  28. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  29. @camposmilaa
    end to end

    View Slide

  30. @camposmilaa
    end to end

    View Slide

  31. @camposmilaa
    unidade
    controller
    service model
    model
    logic object
    repository
    model

    View Slide

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

    View Slide

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

    View Slide

  34. @camposmilaa
    unidade
    controller
    service model
    model
    logic object
    repository
    model

    View Slide

  35. @camposmilaa
    unidade
    colaborador 2
    colaborador 1
    unidade

    View Slide

  36. @camposmilaa
    unidade
    test double 2
    test double 1
    colaborador 2
    colaborador 1
    unidade

    View Slide

  37. @camposmilaa
    unidade

    View Slide

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

    View Slide

  39. @camposmilaa
    integração
    unidade
    e2e
    lento

    View Slide

  40. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  41. @camposmilaa
    e2e
    integração
    unidade
    lento

    View Slide

  42. @camposmilaa
    unidade
    lento

    View Slide

  43. @camposmilaa
    unidade
    e2e
    lento

    View Slide

  44. @camposmilaa
    integração
    unidade
    e2e
    lento

    View Slide

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

    View Slide

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

    View Slide

  47. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

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

    View Slide

  49. @camposmilaa
    complicado

    View Slide

  50. @camposmilaa
    teste com
    lógica
    complicado

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  60. @camposmilaa
    não claro

    View Slide

  61. @camposmilaa
    não claro

    View Slide

  62. @camposmilaa
    não claro

    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
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

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

    View Slide

  69. @camposmilaa
    ajeita o que precisa para o teste funcionar
    bagunçado

    View Slide

  70. @camposmilaa
    ajeita o que precisa para o teste funcionar
    executa a ação que você quer testar
    bagunçado

    View Slide

  71. @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

  72. @camposmilaa
    A
    A
    A

    View Slide

  73. @camposmilaa
    Arrange
    A
    A

    View Slide

  74. @camposmilaa
    Arrange
    Act
    A

    View Slide

  75. @camposmilaa
    Arrange
    Act
    Assert

    View Slide

  76. @camposmilaa
    setup
    exercise
    verify
    Arrange
    Act
    Assert

    View Slide

  77. @camposmilaa

    View Slide

  78. @camposmilaa
    bagunçado

    View Slide

  79. @camposmilaa
    bagunçado

    View Slide

  80. @camposmilaa
    bagunçado

    View Slide

  81. @camposmilaa
    bagunçado

    View Slide

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

    View Slide

  83. @camposmilaa
    mágico

    View Slide

  84. @camposmilaa
    mágico

    View Slide

  85. @camposmilaa
    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
    teste com
    lógica
    teste
    bagunçado
    teste não
    claro
    teste muito
    mágico

    View Slide

  91. @camposmilaa
    código real precisa ser refatorado
    lógica

    View Slide

  92. @camposmilaa
    setup extenso/complexo
    lógica

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  100. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  101. @camposmilaa
    testes que passam depois do rebuild
    desnecessário

    View Slide

  102. @camposmilaa
    testes que passam depois do rebuild
    testes que funcionam dependendo da ordem
    desnecessário

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  114. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  115. @camposmilaa
    lento
    complicado
    desnecessário

    View Slide

  116. @camposmilaa
    lento
    complicado
    desnecessário
    bonus

    View Slide

  117. @camposmilaa
    falta de testes!

    View Slide

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

    View Slide

  119. @camposmilaa
    melhor ter testes ruins do que não ter nenhum.
    MELHOR NÃO TER TESTES DO QUE TER TESTES RUINS.

    View Slide

  120. @camposmilaa
    melhor ter testes ruins do que não ter nenhum.
    MELHOR NÃO TER TESTES DO QUE TER TESTES RUINS.
    confiança entendimento

    View Slide

  121. @camposmilaa
    agradecida!
    [email protected]
    @camposmilaa
    bit.ly/tdc-testes-camila

    View Slide