Estava estudando testes unitários em Java com JUnit e Mockito. Depois de ver alguns cursos sobre isso eu tentei aplicar em um projeto pessoal. Entretanto, chegou um momento que eu criei uma classe utilitária (sem estado e com métodos estáticos) e queria saber se eu deveria "mockar" ela nos testes. Então, após pesquisar na internet cheguei a 3 respostas diferentes com base em diferentes discussões (principalmente esta):
- Fazer teste unitário da classe utilitária e "mockar" ela nos outros testes.
- Fazer teste unitário da classe utilitária e não "mockar" ela nos outros testes.
- Não devemos "mockar" e criar teste unitário para ela pois já está sendo testada em outros testes.
Continuei pesquisando e dizem que criar mocks de métodos estáticos são "bad smells". Entretanto, existem situações que é bom "mockar" (de acordo com as discussões):
- Quando é fornecido por um código externo e não podemos mudar a sua implementação.
- Quando o método acessa outros componentes, por exemplo, um banco de dados.
- Quando o método é demorado, podendo ser por causa do motivo acima.
Minha jornada continuou e encontrei um parágrafo bem interessante em um outro tópico:
"Your unit tests should normally be focused on the observable behaviors in your system. So refactoring a private method into a new "method object" doesn't necessarily mean that you need to introduce a new battery of tests (although you are welcome to do so)."
E também nesse:
"I always remembers one phrase from Ian Cooper 'test things you want to preserve', when you are mocking a static you are stating in our test that do you want to preserve not the functionality, you want to preserve this design with a static method call. Are you sure you want to preserve this?"
Então fiquei pensando: "Devemos criar testes unitários para cada classe e método dos nossos projetos? Por exemplo, factories, classes utilitárias e outros métodos estáticos? E devemos criar mocks para todas as dependências do objeto?"
Gostaria de saber a opinião de vocês sobre isso, podendo também mandar sugestões de leitura/vídeo que eu lerei/verei com bastante prazer :).