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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.