As anotações `@generatemocks` e`@generatenicemocks` no Mockito são usadas para gerar classes simuladas para testes de unidade em aplicações de dardos e vibração. Embora ambas as anotações sirvam ao mesmo objetivo primário, elas diferem significativamente em seu comportamento ao lidar com chamadas de método não sujeitas.
@generatemocks
- Comportamento para métodos não cobertos: Quando um método é chamado em um objeto simulado gerado com `@generatemocks` e nenhum stub foi definido para esse método, o Mockito lançará uma exceção. Esse comportamento garante que você defina explicitamente stubs para todos os métodos que devem ser chamados durante um teste, ajudando a obter possíveis supervisões na configuração de teste.
- Uso: esta anotação é normalmente usada quando você deseja um controle rigoroso sobre o comportamento de suas zombarias, garantindo que quaisquer chamadas de método inesperadas sejam imediatamente sinalizadas como erros.
- Status da depreciação: `@generatemocks` é considerado menos recomendado em comparação com`@generatenicemocks` devido ao seu comportamento rigoroso, o que pode levar a um código de teste mais detalhado, se não for gerenciado com cuidado.
@generatenicemocks
- Comportamento para métodos não cobertos: em contraste, as zombares geradas com `@generatenicemocks` retornarão um valor legal padrão para o tipo de retorno do método quando um método não é chamado. Esse valor padrão não se destina ao uso na lógica de teste, mas serve para evitar erros de tempo de execução devido a valores nulos ou ausentes.
- Uso: esta anotação é recomendada para a maioria dos casos de uso, pois simplifica a redação de testes, reduzindo a necessidade de extrair todas as chamadas de método possíveis. Isso torna os testes mais robustos, evitando falhas devido a stubs esquecidos.
- Recursos adicionais: `@generatenicemocks` permite apenas 'Mockspec' em sua lista de argumentos, fornecendo mais flexibilidade na personalização das classes simuladas geradas. Por exemplo, você pode especificar um nome personalizado para a classe simulada usando o parâmetro `AS` em` MockSpec`.
Diferenças -chave
1. Manuseio de métodos não cobertos: A diferença mais significativa é como cada anotação lida com o método chama sem stubs explícitos. `@Generatemocks` lança uma exceção, enquanto`@generatenicemocks` retorna um valor padrão.
2. Simplicidade e robustez de código: `@generatenicemocks` geralmente leva a um código de teste mais simples e robusto, reduzindo a necessidade de mortidas exaustivas.
3. Personalização: `@generatenicemocks` oferece mais opções de personalização por meio de 'Mockspec`, permitindo nomes de classes de simulação personalizadas e outras configurações avançadas.
Em resumo, `@generatenicemocks` é geralmente preferido por sua capacidade de simplificar o código do teste e reduzir os erros devido a métodos não subbritados, enquanto`@generatemocks 'fornece uma abordagem mais rigorosa que pode ser útil em cenários específicos em que o controle explícito sobre o comportamento simulado é necessário [1] [4] [11].
Citações:[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-genenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logrocket.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotações/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated mock-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-generatemocks-annotation-contains-a-cllass-which-apears-to-already-be-mocked
[11] https://pub.dev/packages/mockito