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

Como não escrever seus testes

Como não escrever seus testes

Esses slides olham para os testes que escrevemos (em ruby + rspec) e nos ajudam a perceber alguns dos erros que cometemos quando os escrevemos, que podem indicar tanto testes ruins como código de produção ruim .

Camila Campos

July 10, 2017
Tweet

More Decks by Camila Campos

Other Decks in Programming

Transcript

  1. como escrever seus testes @camposmilaa

  2. test smells @camposmilaa

  3. coisas para levar em consideração na hora de escrever seus

    testes @camposmilaa
  4. como NÃO escrever seus testes @camposmilaa

  5. Camila Campos Desenvolvedora na Creditas Organizadora do Rails Girls

  6. Plataforma online Empréstimo com garantia Juros baixos pra você <3

    !!! TAMO CONTRATANDO !!!
  7. Como escrever testes?

  8. Como não escrever testes?

  9. O que são? O que são?

  10. O que são? Pra que servem? O que são? Como

    se organizam?
  11. O que são? Como se organizam? Pra que servem?

  12. O que são? Pra que servem? Como organizar? O que

    comem? O que são? Como se organizam? Pra que servem? O que comem?
  13. Hoje! no globo repórter!

  14. O que são testes?

  15. além de guiar o design do seu código

  16. TESTE é uma parada que garante que seu código funcione

  17. TESTE é um bocado de código que garante que seu

    código “real” funcione
  18. TESTE é um bocado de código não testado que garante

    que seu código “real” funcione
  19. OBVIAMENTE não vamos testar nossos testes.

  20. SIMPLES

  21. SIMPLES LEGÍVEIS

  22. SIMPLES LEGÍVEIS OBJETIVOS

  23. SIMPLES LEGÍVEIS OBJETIVOS ORGANIZADOS

  24. SIMPLES LEGÍVEIS OBJETIVOS ORGANIZADOS

  25. Teste é um código que só faz 3 coisas 1.

    Ajeita o que precisa para o teste funcionar; 2. Executa a ação que você quer testar; 3. Verifica se aconteceu o que você esperava.
  26. A A A

  27. Arrange A A

  28. Arrange Act A

  29. Arrange Act Assert

  30. Setup Exercise Verify Arrange Act Assert

  31. None
  32. Bê dê ibagens!

  33. Bê dê ibagens!

  34. Bê dê ibagens!

  35. Bê dê ibagens!

  36. Pra que servem?

  37. Níveis de teste

  38. UI - Testes Ponta a ponta Testam a interação de

    um usuário real com o software Ser o mais realista possível Propósito: Achar bugs SEM MOCKS/STUBS/FAKE/ETC
  39. Unit TESTE UNITÁRIO vs TESTE DE UNIDADE

  40. Unit TESTE UNITÁRIO vs TESTE DE UNIDADE

  41. Unit - Testes de Unidade Testam cada unidade do sistema

    isoladamente Isolam falhas Propósito: Guiar o design do código MOCK/STUB/FAKE PRA TUDO!
  42. Unit - Testes de Unidade Test Driven Development

  43. Unit - Testes de Unidade Test Driven Design

  44. Unit - Testes de Unidade

  45. Service - Testes de Integração Testam o comportamento de 2

    ou mais unidades Sem a maior parte das desvantagens do end-to-end Propósito: Achar bugs
  46. Níveis de teste

  47. Alguns Smells a se evitar

  48. doubles VS spies

  49. command ➔ Retorna alguma coisa ➔ Não muda nada Se

    preocupam com retorno Usar doubles ➔ Não retorna nada ➔ Muda alguma coisa Se preocupam com mensagens passadas Usar spies query VS
  50. command

  51. query

  52. Testes frágeis

  53. Testes frágeis

  54. Método privado

  55. Método privado

  56. Factory Trap

  57. Factory Trap

  58. Factory Trap

  59. Factory não é FIXTURE

  60. Incluir lógica no teste

  61. Incluir lógica no teste

  62. Descrição ruim “Any fool can write code that a computer

    can understand. Good programmers write code that humans can understand.” @martinfowler
  63. Descrição ruim vs

  64. Múltiplas verificações (assertion roulette)

  65. Setup/Arrange extenso + Muitas dependências

  66. Setup/Arrange extenso + Muitas dependências

  67. Setup/Arrange extenso + Muitas dependências

  68. Setup/Arrange extenso + Muitas dependências

  69. Setup/Arrange extenso + Muitas dependências

  70. Setup/Arrange extenso + Muitas dependências

  71. Setup/Arrange extenso + Muitas dependências

  72. Setup/Arrange extenso + Muitas dependências

  73. Setup/Arrange extenso + Muitas dependências pra resolver: uso de DESIGN

    PATTERNS E CONCEITOS DE ORIENTAÇÃO A OBJETOS
  74. Setup/Arrange extenso (Refatorado)

  75. Testes repetitivos

  76. Testes repetitivos

  77. Testes repetitivos

  78. Muito DRY

  79. Muito DRY

  80. Muito DRY

  81. Muito DRY

  82. Muito DRY

  83. Muito DRY + Mystery Guest

  84. Muito DRY: fases + Let’s not

  85. SHOW ME THE CODE!

  86. O teste

  87. None
  88. None
  89. None
  90. A classe

  91. None
  92. Os problemas

  93. None
  94. None
  95. A refatoração

  96. None
  97. None
  98. None
  99. None
  100. None
  101. None
  102. None
  103. None
  104. melhor ter testes ruins do que não ter nenhum.

  105. melhor ter testes ruins do que não ter nenhum. MELHOR

    NÃO TER TESTES DO QUE TER TESTES RUINS.
  106. Dúvidas? [email protected] @camposmilaa github.com/camilacampos

  107. Valeu Grandão! [email protected] @camposmilaa github.com/camilacampos

  108. Links Interessantes 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/