O que camada-de-servico-teste-unitario faz?
Fornece padrões para teste unitário da camada de serviço com Mockito. Cria testes isolados que simulam chamadas de repositório, verificam invocações de métodos, testam cenários de exceção e simulam respostas de API externas. Use ao testar comportamentos de serviço e lógica de negócios sem banco de dados ou serviços externos.
Visão Geral
Esta skill é ideal para desenvolvedores que desejam testar a camada de serviço de suas aplicações Java de forma isolada. Ao usar Mockito, você pode criar testes que não dependem de infraestrutura externa, como bancos de dados reais ou APIs de terceiros.
Padrões de Teste
1. Simular Chamadas de Repositório
Use mock(Repositorio.class) para criar um mock do repositório e defina o comportamento esperado com when().
Repositorio mockRepositorio = mock(Repositorio.class);
when(mockRepositorio.buscarPorId(1L)).thenReturn(novoUsuario());
2. Verificar Invocações de Métodos
Após executar o método de serviço, verifique se os métodos do mock foram chamados corretamente.
verify(mockRepositorio).salvar(novoUsuario());
verify(mockRepositorio, never()).deletar(qualquerLong());
3. Testar Cenários de Exceção
Simule exceções lançadas pelo repositório e verifique se o serviço as trata adequadamente.
when(mockRepositorio.buscarPorId(1L)).thenThrow(new RuntimeException("Erro no banco"));
assertThrows(ServicoException.class, () -> servico.processar(1L));
4. Simular Respostas de API Externa
Use mock(ClienteApiExterna.class) e defina respostas simuladas para chamadas de API.
ClienteApiExterna mockApi = mock(ClienteApiExterna.class);
when(mockApi.consultarDados()).thenReturn(novoDados());
Exemplo Completo
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
public class ServicoUsuarioTest {
@Test
public void testCriarUsuarioComSucesso() {
RepositorioUsuario mockRepositorio = mock(RepositorioUsuario.class);
ServicoUsuario servico = new ServicoUsuario(mockRepositorio);
Usuario usuario = novoUsuario();
servico.criar(usuario);
verify(mockRepositorio).salvar(usuario);
}
@Test
public void testBuscarUsuarioInexistente() {
RepositorioUsuario mockRepositorio = mock(RepositorioUsuario.class);
when(mockRepositorio.buscarPorId(1L)).thenReturn(null);
ServicoUsuario servico = new ServicoUsuario(mockRepositorio);
assertThrows(UsuarioNaoEncontradoException.class, () -> servico.buscar(1L));
}
}
Boas Práticas
- Utilize
@InjectMockspara injetar mocks automaticamente no serviço. - Use
@Mockpara criar mocks de dependências. - Limpe o estado dos mocks entre testes com
MockitoAnnotations.openMocks(this). - Prefira
thenReturnpara valores fixos ethenAnswerpara lógica dinâmica.
Compatibilidade
- Java 8+
- Mockito 2+
- JUnit 5
- Spring Boot, Jakarta EE, ou qualquer outro framework Java