1
resposta

Duvidas sobre teste Java Spring #Teste #TesteUnitario

Olá, tudo bem?

Eu estou com dúvida sobre teste, e o seguinte segundo a documentação existem testes unitários e testes de integração.

Nos Testes Unitários eu testo apenas uma pequena parte do meu código.Correto?

E no Teste de Integração eu posso testar usando diversas partes do meu código (controller, serviço, banco).Correto?

Acontece que eu sigo o padrão MVC e o caminho da minha aplicação e assim a requisição bate no controller, manda para o service onde é feita a lógica de negócios e manda para o repository (banco de dados).

Dessa forma: controller -> service -> repository.

Nos testes de Integração, eu crio uma classe de teste para testar um método específico dentro do meu controller e lá eu acabo utilizando minhas outras classes (service e repository) através de Mock, se necessário.

(1 dúvida) É aconselhável usar o Mock em minhas classes de teste de integração ao invés de realmente instanciar?

(2 dúvida) Eu preciso criar uma classe diferente para cada método presente dentro do meu controller? Ou eu posso testar todos os meus métodos dentro de uma classe teste só?

(3 dúvida) Referente aos testes unitários, em qual parte da minha estrutura MVC eu deveria testar? O serviço? O controller? As query dentro do meu repositório? Ou todos?

(4 dúvida) Como eu sei se um teste deveria ser um teste unitário ou um teste de integração?

1 resposta

(1) É aconselhável usar Mock em testes de integração? Não. Em testes de integração, o objetivo é justamente testar a integração real entre os componentes, então você não deve usar mocks para simular Service ou Repository — isso descaracteriza o teste de integração.

(2) Devo criar uma classe de teste para cada método do controller? Não precisa. Você pode (e deve) agrupar os testes relacionados ao mesmo controller em uma única classe de teste, organizando cada método em funções de teste separadas.

(3) Em qual parte da estrutura MVC eu deveria fazer testes unitários? O ideal é fazer testes unitários em:

Service: Principal foco de testes unitários. Aqui está sua lógica de negócio.

Repository: Se você tiver lógica dentro das queries, pode testar com banco em memória.

Controller: Pode ter teste unitário, mas normalmente foca mais em testes de integração (pois geralmente ele apenas redireciona as chamadas para o service).

(4) Como sei se um teste deveria ser unitário ou de integração? Use esta lógica simples:

Tipo de Teste Quando usar? Unitário Testar uma unidade isolada do código, sem dependência externa. Ex: um método da Service com regras de negócio. Integração Testar se vários componentes funcionam juntos. Ex: chamada no controller que precisa do retorno do service e do repository. Mock necessário? Sim para unitário. Não para integração. Dica prática: Se você está testando regras de negócio → teste unitário no Service.

Se você está testando fluxo completo de request → teste de integração (Controller → Service → Repository → BD).