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.
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.
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:
@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.
@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 ?
Isso mesmo.