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.