O método `reset ()` `` `` `` `) é um recurso que permite redefinir um objeto simulado para que ele possa ser reutilizado. No entanto, seu uso geralmente é desencorajado pelos desenvolvedores e usuários da Mockito, pois pode indicar testes ou código mal projetados que são excessivamente complexos e difíceis de testar de maneira limpa [7] [9]. Em vez disso, a abordagem recomendada é criar novas zombarias para cada método de teste para garantir a independência e a clareza nos testes [7] [9].
Comparação com outras bibliotecas de zombaria
1. JMOCK2: Ao contrário do Mockito, o JMOCK2 usa um contexto para gerenciar expectativas e informações simuladas, que são reconstruídas para cada método de teste. Isso significa que o JMOCK2 não requer uma redefinição explícita como o Mockito faz [10]. A abordagem do JMOCK2 ajuda a manter o isolamento do teste sem a necessidade de redefinir manualmente as zombarias.
2. Easymock: Easymock também não requer um método de redefinição. Ele foi projetado para criar novos objetos simulados para cada teste, semelhante à prática recomendada com Mockito. Szczepan Faber, um desenvolvedor da Mockito, menciona que nunca precisou de um recurso de redefinição enquanto usava o Easymock [8].
3. Mockito vs. outras bibliotecas: em geral, outras bibliotecas de zombaria como JMOCK2 e Easymock promovem uma abordagem de teste mais limpa, gerenciando automaticamente o estado simulado ou incentivando a criação de novas zombarias para cada teste. O método `reset ()` `` `` ``) da Mockito é mais uma exceção do que a norma nas estruturas de zombaria.
Melhores práticas
- Evite usar `reset ()`: a menos que seja absolutamente necessário, como quando uma simulação é injetada por um contêiner e não pode ser recriada para cada teste, é aconselhável evitar o uso de `reset ()`. Em vez disso, concentre -se na criação de testes simples e focados com novas zombarias para cada cenário [7] [9].
- Use `clearinvocations ()`: se você precisar limpar as interações sem redefinir a stubbing, use `clearinvocations ()`. Este método permite que você preserve a malhada durante a limpeza de quaisquer interações gravadas, que podem ser úteis em certos cenários [5].
- Código de refattor para testabilidade: se você precisar usar `reset ()` frequentemente, pode indicar que seu código pode se beneficiar da refatoração para torná -lo mais testável. Isso pode envolver a quebra de métodos complexos ou melhorando a injeção de dependência [9].
Em resumo, enquanto o Mockito fornece um método `reset ()`, seu uso geralmente é desencorajado em favor da criação de novas zombarias para cada teste. Outras bibliotecas zombeteiras geralmente promovem práticas semelhantes, enfatizando testes limpos e independentes em relação ao gerenciamento de simulação complexa.
Citações:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/aproad-use-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-aproad-use-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean up-mocks-in-spring-tests-when-using-mockito