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

[CapiConf] Como não odiar seus testes

[CapiConf] 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.

Camila Campos

November 16, 2020
Tweet

More Decks by Camila Campos

Other Decks in Programming

Transcript

  1. @camposmilaa Como não odiar seus testes #CapiConf2020 @camposmilaa

  2. @camposmilaa Camila Campos SumUp Rails Girls São Paulo Women Dev

    Summit @camposmilaa
  3. @camposmilaa @camposmilaa Camila Campos Meu propósito de vida (WIP) é

    influenciar pessoas para reduzir desigualdades sócio-culturais dentro de tecnologia, através da educação e do bom humor.
  4. @camposmilaa sumup.onl/secandidate

  5. @camposmilaa Como não odiar seus testes #CapiConf2020 @camposmilaa

  6. @camposmilaa Nós odiamos nossos testes?

  7. @camposmilaa Por que nós odiamos nossos testes?

  8. @camposmilaa Por que nós escrevemos testes?

  9. @camposmilaa nós gostamos

  10. @camposmilaa nós gostamos alta confiança

  11. @camposmilaa nós gostamos alta confiança entendimento

  12. @camposmilaa nós gostamos alta confiança entendimento

  13. @camposmilaa alta confiança funciona

  14. @camposmilaa alta confiança posso refatorar funciona

  15. @camposmilaa alta confiança não quebrei nada posso refatorar funciona

  16. @camposmilaa nós gostamos alta confiança entendimento

  17. @camposmilaa entendimento Fácil de usar

  18. @camposmilaa entendimento Fácil de evoluir Fácil de usar

  19. @camposmilaa entendimento Guia design Fácil de evoluir Fácil de usar

  20. @camposmilaa test driven development

  21. @camposmilaa

  22. @camposmilaa

  23. @camposmilaa

  24. @camposmilaa

  25. @camposmilaa test driven design

  26. @camposmilaa

  27. @camposmilaa Por que odiamos nossos testes?

  28. @camposmilaa 1. 2. 3.

  29. @camposmilaa Lentos 1. 2. 3.

  30. @camposmilaa Lentos Complicados 1. 2. 3.

  31. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  32. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  33. @camposmilaa Tempo para rodar vs Número de testes Testes lentos

  34. @camposmilaa Tempo para rodar vs Número de testes Testes lentos

  35. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  36. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos contrato

    componente aceitação
  37. @camposmilaa Ponta a ponta Testes lentos

  38. @camposmilaa Ponta a ponta Testes lentos

  39. @camposmilaa Unidade controller service model model service repository model Testes

    lentos
  40. @camposmilaa Unidade Testes lentos controller service model model service repository

    model controller service model model service repository model
  41. @camposmilaa Unidade Testes lentos controller service model model service repository

    model controller service model model service repository model
  42. @camposmilaa Unidade unidade colaborador 2 colaborador 1 Testes lentos

  43. @camposmilaa Unidade unidade test double 2 test double 1 colaborador

    2 colaborador 1 Testes lentos
  44. @camposmilaa Unidade Testes lentos

  45. @camposmilaa Unidade Testes lentos

  46. @camposmilaa Integração Testes lentos controller service model model service repository

    model controller service model model service repository model
  47. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  48. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  49. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  50. @camposmilaa Minha dica Testes lentos

  51. @camposmilaa Pirâmide de testes Testes lentos

  52. @camposmilaa Pirâmide de testes unidade Testes lentos

  53. @camposmilaa Pirâmide de testes e2e unidade Testes lentos

  54. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  55. @camposmilaa Regras e Convenções Dados (DB) Dependências externas Colaboradores Testes

    lentos
  56. @camposmilaa Regras e Convenções Testes lentos Bando de Dados Dependências

    externas Colaboradores Ponta a Ponta Sim Sim* Sim Integração Sim Não Sim Unidade Não Não Não
  57. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos

  58. @camposmilaa Pirâmide de testes e2e integração unidade Testes lentos Mudando

    uma classe Testando uma feature Antes de commitar
  59. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  60. @camposmilaa Teste que são difíceis de ler, manter e/ou entender

    Testes complicados
  61. @camposmilaa 1. 2. 3. 4. Sem clareza Bangunçados Mágicos Espertos

    demais Testes complicados
  62. @camposmilaa 1. 2. 3. 4. Sem clareza Bangunçados Mágicos Espertos

    demais Testes complicados
  63. @camposmilaa Teste é uma parada que garante que o seu

    código “de verdade” funciona Testes complicados > Sem clareza
  64. @camposmilaa Teste é código (que garante que o código "de

    verdade" funciona) Testes complicados > Sem clareza
  65. @camposmilaa Teste é código Testes complicados > Sem clareza não

    testado
  66. @camposmilaa Testes complicados > Sem clareza Simples Teste é código

    não testado
  67. @camposmilaa Testes complicados > Sem clareza Pequeno Simples Teste é

    código não testado
  68. @camposmilaa Testes complicados > Sem clareza Fácil de ler Pequeno

    Simples Teste é código não testado
  69. @camposmilaa Testes complicados > Sem clareza Fácil de ler Pequeno

    Simples Objetivo Teste é código não testado
  70. @camposmilaa Por exemplo Testes lentos

  71. @camposmilaa it 'sends a message' do person = Person.new(name: 'John')

    response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  72. @camposmilaa it 'sends a message' do person = Person.new(name: 'John')

    response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  73. @camposmilaa it 'sends a message' do person = Person.new(name: 'John')

    response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  74. @camposmilaa it 'sends a message' do person = Person.new(name: 'John')

    response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  75. @camposmilaa it 'sends a message' do person = Person.new(name: 'John')

    response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  76. @camposmilaa Descrição ruim it 'sends a message' do person =

    Person.new(name: 'John') response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  77. @camposmilaa Descrição ruim it 'sends a message' do person =

    Person.new(name: 'John') response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  78. @camposmilaa Descrição ruim it 'greets a person' do person =

    Person.new(name: 'John') response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  79. @camposmilaa Descrição ruim it 'greets a person' do person =

    Person.new(name: 'John') response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  80. @camposmilaa it 'greets a person' do person = Person.new(name: 'John',

    last_name: 'Doe', age: 27) response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  81. @camposmilaa it 'greets a person' do person = Person.new(name: 'John',

    last_name: 'Doe', age: 27) response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  82. @camposmilaa it 'greets a person' do person = Person.new(name: 'John',

    last_name: 'Doe', age: 27) response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  83. @camposmilaa Coisas falsamente importantes it 'greets a person' do person

    = Person.new(name: 'John', last_name: 'Doe', age: 27) response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  84. @camposmilaa Coisas falsamente importantes it 'greets a person' do person

    = Person.new(name: 'John') response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  85. @camposmilaa Coisas falsamente importantes it 'greets a person' do person

    = Person.new(attributes.merge(name: 'John')) response = Messenger.new(person).greet expect(response).to eq 'Hello, John' end Testes complicados > Sem clareza
  86. @camposmilaa Coisas falsamente importantes it 'greets a person' do person

    = Person.new(name: 'anyname') response = Messenger.new(person).greet expect(response).to eq 'Hello, anyname' end Testes complicados > Sem clareza
  87. @camposmilaa 1. 2. 3. 4. Sem clareza Bangunçados Mágicos Espertos

    demais Testes complicados
  88. @camposmilaa Testes podem fazer 3 coisas Testes complicados > Bangunçados

  89. @camposmilaa Ajeita tudo que precisa Testes complicados > Bangunçados

  90. @camposmilaa Ajeita tudo que precisa Chama o que está testando

    Testes complicados > Bangunçados
  91. @camposmilaa Ajeita tudo que precisa Chama o que está testando

    Verifica comportamento Testes complicados > Bangunçados
  92. @camposmilaa Testes complicados > Bangunçados A A A

  93. @camposmilaa Testes complicados > Bangunçados Arrange A A

  94. @camposmilaa Testes complicados > Bangunçados Arrange Act A

  95. @camposmilaa Testes complicados > Bangunçados Arrange Act Assert

  96. @camposmilaa Setup Testes complicados > Bangunçados Arrange Act Assert

  97. @camposmilaa Setup Exercise Testes complicados > Bangunçados Arrange Act Assert

  98. @camposmilaa Setup Exercise Verify Testes complicados > Bangunçados Arrange Act

    Assert
  99. @camposmilaa Testes complicados > Bangunçados

  100. @camposmilaa Testes fazem 3 coisas it 'greets a person' do

    person = Person.new(name: 'any-name') # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes complicados > Bangunçados
  101. @camposmilaa Testes fazem 3 coisas it 'greets a person' do

    person = Person.new(name: 'any-name') # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes complicados > Bangunçados
  102. @camposmilaa Testes fazem 3 coisas it 'greets a person' do

    person = Person.new(name: 'any-name') # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes complicados > Bangunçados
  103. @camposmilaa it 'greets a person' do person = Person.new(name: 'any-name')

    # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes fazem 3 coisas Testes complicados > Bangunçados
  104. @camposmilaa Testes fazem 3 coisas it 'greets a person' do

    person = Person.new(name: 'any-name') # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes complicados > Bangunçados
  105. @camposmilaa Testes fazem 3 coisas it 'greets a person' do

    person = Person.new(name: 'any-name') # Setup response = Messenger.new(person).greet # Exercise expect(response).to eq 'Hello, any-name' # Verify end Testes complicados > Bangunçados
  106. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  107. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  108. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  109. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  110. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  111. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = double('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup expect(mailer).to receive(:notify).with(person.email) # Verify Messenger.new(person, mailer: mailer).send_email # Exercise end Testes complicados > Bangunçados
  112. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = spy('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup Messenger.new(person, mailer: mailer).send_email # Exercise expect(mailer).to have_received(:notify).with(person.email) # Verify end Testes complicados > Bangunçados
  113. @camposmilaa Testes fazem 3 coisas it 'sends email to person'

    do mailer = spy('my mailer') # Setup person = Person.new(name: 'any-name', email: 'e@mail.com') # Setup Messenger.new(person, mailer: mailer).send_email # Exercise expect(mailer).to have_received(:notify).with(person.email) # Verify end Testes complicados > Bangunçados
  114. @camposmilaa 1. 2. 3. 4. Sem clareza Bangunçados Mágicos Espertos

    demais Testes complicados
  115. @camposmilaa Testes mágicos Testes complicados > Mágicos

  116. @camposmilaa Testes mágicos it 'greets a person' do # ...

    end it 'gracefully greets a person' do # ... end Testes complicados > Mágicos
  117. @camposmilaa Testes mágicos it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  118. @camposmilaa Testes mágicos it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  119. @camposmilaa Testes mágicos it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  120. @camposmilaa Testes mágicos it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  121. @camposmilaa Testes mágicos it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  122. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } it 'greets

    a person' do response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  123. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } it 'greets

    a person' do response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  124. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'greets a person' do expect(messenger.greet).to eq 'Hello, any-name' end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  125. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'greets a person' do expect(messenger.greet).to eq 'Hello, any-name' end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  126. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'greets a person' do expect(messenger.greet).to eq 'Hello, any-name' end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  127. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  128. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  129. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  130. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does any other thing' do # .... end it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  131. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does something else' do # .... end it 'does any other thing' do # .... end it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  132. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does something' do # .... end it 'does something else' do # .... end it 'does any other thing' do # .... end it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  133. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does something' do # .... end it 'does something else' do # .... end it 'does any other thing' do # .... end it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  134. @camposmilaa Testes mágicos let(:person) { Person.new(name: 'any-name') } let(:messenger) {

    Messenger.new(person) } it 'does something' do # .... end it 'does something else' do # .... end it 'does any other thing' do # .... end it 'does nothing sometimes' do # .... end it 'does an entirely different thing' do # .... end it 'greets a person' do expect(messenger.greet).to eq "Hello, #{person.name}" end it 'gracefully greets a person' do expect(messenger.fancy_greet).to eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  135. @camposmilaa Mystery Guest it 'gracefully greets a person' do expect(messenger.fancy_greet).to

    eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  136. @camposmilaa Mystery Guest it 'gracefully greets a person' do expect(messenger.fancy_greet).to

    eq "Good afternoon, ma'am #{person.name}!" end Testes complicados > Mágicos
  137. @camposmilaa Mystery Guest it 'greets a person' do person =

    Person.new(name: 'any-name') response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end it 'gracefully greets a person' do person = Person.new(name: 'any-name') response = Messenger.new(person).fancy_greet expect(response).to eq "Good afternoon, ma'am any-name!" end Testes complicados > Mágicos
  138. @camposmilaa it 'greets a person' do person = Person.new( name:

    'any-name', att2: 'xpto', att3: 'xpto', att4: 'xpto', att5: 'xpto', att6: 'xpto', att7: 'xpto', att8: 'xpto', att9: 'xpto', att10: 'xpto', att11: 'xpto', att12: 'xpto', att13: 'xpto', att14: 'xpto', att15: 'xpto', att16: 'xpto', att17: 'xpto', att18: 'xpto', att19: 'xpto', att20: 'xpto', att21: 'xpto', att22: 'xpto', att23: 'xpto' ) response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end Mystery Guest Testes complicados > Mágicos
  139. @camposmilaa it 'greets a person' do person = Person.new(person_attributes.merge(name: 'any-name'))

    response = Messenger.new(person).greet expect(response).to eq 'Hello, any-name' end Mystery Guest Testes complicados > Mágicos
  140. @camposmilaa 1. 2. 3. 4. Sem clareza Bangunçados Mágicos Espertos

    demais Testes complicados
  141. @camposmilaa Testes complicados > Espertos demais Código real precisa ser

    refatorado
  142. @camposmilaa Hora de refatorar!! Setup complexo/grande

  143. @camposmilaa Hora de refatorar!! Setup complexo/grande Muitas dependências

  144. @camposmilaa Hora de refatorar!! Setup complexo/grande Múltiplas verificações Muitas dependências

  145. @camposmilaa Hora de refatorar!! Setup complexo/grande Múltiplas verificações Muitas dependências

    Muitas responsabilidades
  146. @camposmilaa Hora de refatorar!! Setup complexo/grande Múltiplas verificações Muitos passos

    de "exercise" Muitas dependências Muitas responsabilidades
  147. @camposmilaa Hora de refatorar!! Setup complexo/grande Múltiplas verificações Muitos passos

    de "exercise" Muitas dependências Muitas responsabilidades API complexa
  148. @camposmilaa Hora de refatorar!! Setup complexo/grande Múltiplas verificações Código complexo

    no test (ex. Loops, métodos privados) Muitos passos de "exercise" Muitas dependências Muitas responsabilidades API complexa
  149. @camposmilaa Hora de refatorar!! Muitos passos de "exercise" Setup complexo/grande

    Múltiplas verificações Código complexo no test (ex. Loops, métodos privados) Muitos passos de "exercise" Muitas dependências Muitas responsabilidades Código complexo API complexa
  150. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  151. @camposmilaa São intermitentes Testes desnecessários

  152. @camposmilaa São intermitentes São dependentes de ordem Testes desnecessários

  153. @camposmilaa São intermitentes São dependentes de ordem São frágeis Testes

    desnecessários
  154. @camposmilaa Testes redundantes controller service model repository Testes desnecessários

  155. @camposmilaa Testes redundantes controller service model repository A B Testes

    desnecessários controller service model repository
  156. @camposmilaa Testes redundantes controller service model repository A B A

    B Testes desnecessários controller service model repository A B
  157. @camposmilaa Testes redundantes controller service model repository A B A

    B A B Testes desnecessários controller service model repository A B A B
  158. @camposmilaa Testes redundantes controller service model repository A B A

    B A B C Testes desnecessários controller service model repository A C A B A B
  159. @camposmilaa Testes redundantes controller service model repository A B A

    B A B C C Testes desnecessários controller service model repository A A A B
  160. @camposmilaa Testes redundantes controller service model repository A B A

    B A B C C C Testes desnecessários controller service model repository A A A
  161. @camposmilaa Testes desnecessários Testes redundantes

  162. @camposmilaa Teste para tudo Testes desnecessários Testes redundantes

  163. @camposmilaa Testes redundantes controller service model repository A B A

    B A B C C C Testes desnecessários controller service model repository A A A
  164. @camposmilaa Testes redundantes Menos testes em camadas Teste para tudo

    Testes desnecessários
  165. @camposmilaa Testes redundantes controller service model repository A B A

    A C Testes desnecessários controller service model repository A A A
  166. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  167. @camposmilaa Lentos Complicados Desnecessários 1. 2. 3.

  168. @camposmilaa

  169. @camposmilaa Testes ruins são melhor que nada

  170. @camposmilaa Testes ruins são melhor que nada Não ter testes

    é melhor que ter testes ruins
  171. @camposmilaa

  172. @camposmilaa Agradecida! bit.ly/camis-capiconf2020 camposmilaa