Gostaria de saber qual a diferença entre Mock e MockBean?
Gostaria de saber qual a diferença entre Mock e MockBean?
Olá Marcelo!
Ótima pergunta! A diferença entre @Mock
e @MockBean
é algo que pode gerar confusão, mas vou tentar explicar de forma simples.
@Mock
é uma anotação do framework Mockito, que é usada para criar objetos simulados (mocks) em testes unitários. Quando você usa @Mock
, está basicamente criando um objeto simulado que pode ser usado para testar uma classe em isolamento, sem depender de implementações reais de suas dependências.
Por exemplo, se você tem uma classe CalculadoraService
que depende de um RepositorioDeNumeros
, você pode usar @Mock
para simular o RepositorioDeNumeros
e testar o comportamento da CalculadoraService
sem precisar de uma implementação real do repositório.
@Mock
RepositorioDeNumeros repositorioMock;
@Test
public void testeCalculadora() {
// Configurar o mock
when(repositorioMock.obterNumero()).thenReturn(10);
// Testar a CalculadoraService
int resultado = calculadoraService.calcular();
// Verificar o resultado
assertEquals(10, resultado);
}
Já @MockBean
é uma anotação do Spring Boot Test, utilizada em testes de integração. Ela é usada para substituir um bean no contexto do Spring por um mock. Isso é útil quando você quer testar uma aplicação Spring Boot e precisa simular o comportamento de um bean específico sem afetar o restante do contexto.
Por exemplo, se você estiver testando um controlador REST que depende de um serviço, você pode usar @MockBean
para simular o serviço e testar o controlador em um ambiente de teste Spring.
@MockBean
ServicoDeUsuario servicoDeUsuarioMock;
@Test
public void testeControlador() {
// Configurar o mock
when(servicoDeUsuarioMock.obterUsuario()).thenReturn(new Usuario("Marcelo"));
// Realizar a chamada ao controlador e verificar a resposta
mockMvc.perform(get("/usuario"))
.andExpect(status().isOk())
.andExpect(content().string("Marcelo"));
}
Espero que essa explicação ajude a esclarecer a diferença entre as duas anotações. Bons estudos!