1
resposta

[Dúvida] Qual a diferença entre Mock e MockBean?

Gostaria de saber qual a diferença entre Mock e MockBean?

1 resposta

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);
}

@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!