Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

@Mock e @InjectMocks

Não ficou claro para mim a diferença dos dois. Tive que criar uns testes parrudos no trabalho e eu não sabia muito bem quando criar o objeto ou não.

3 respostas

Olá, Rodrigo!

Entendo sua dúvida sobre as anotações @Mock e @InjectMocks no contexto dos testes automatizados com Mockito em Java. Vamos esclarecer isso de forma simples:

  1. @Mock: Essa anotação é usada para criar um objeto falso (mock) de uma classe ou interface. É como se você estivesse criando um dublê para simular o comportamento de um objeto real. Por exemplo, se você tem um repositório que acessa o banco de dados, você pode usar @Mock para criar uma versão fictícia desse repositório, que não faz chamadas reais ao banco, mas simula as respostas que você especificar.

    Exemplo prático:

    @Mock
    private PetRepository petRepository;
    

    Aqui, petRepository é um mock que você pode configurar para retornar dados simulados quando métodos específicos forem chamados.

  2. @InjectMocks: Esta anotação é usada para criar uma instância real da classe que você está testando e injetar os mocks nos atributos dessa classe. Isso é útil quando a classe que você está testando depende de outras classes (que você mockou) para funcionar.

    Exemplo prático:

    @InjectMocks
    ValidacaoPetDisponivel validacao;
    

    Neste caso, validacao é uma instância real da classe ValidacaoPetDisponivel, e o Mockito irá automaticamente injetar os mocks, como petRepository, nos campos apropriados dentro dessa instância.

Em resumo, use @Mock para criar versões simuladas de dependências que você não quer testar diretamente e @InjectMocks para injetar esses mocks na classe que você está testando. Isso ajuda a isolar o teste da lógica da classe sem se preocupar com as dependências externas.

Espero ter ajudado e bons estudos!

Acho que entendi, então os métodos que quero realmente testar devem vir da classe injetada com @InjectMocks, e todos metodos que são usados nela ( chamadas de repository, outros services, etc...) devem ser @Mocks ?

solução!

Isso mesmo.