2.1 Anotação @Mock
Existem duas maneiras de trabalhar com objetos fictícios no Mockito. A primeira é criar um objeto totalmente virtual , a segunda é envolver um objeto existente em um wrapper. Vamos começar com o primeiro.
Para criar um objeto totalmente virtual, você precisa escrever o código:
ClassName variable name = Mockito.mock(ClassName.class);
Vamos criar uma classe simulada de ArrayList como exemplo:
@ExtendWith(MockitoExtension.class)
class MockTest {
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
Neste exemplo, criamos um ArrayList falso e armazenamos uma referência a ele na variável mockList. Os métodos deste objeto não fazem nada.
A propósito, esse código pode ser escrito ainda mais curto, pois há uma anotação especial para isso @Mock
.
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
List mockList;
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
No segundo caso, MockitoExtension
ele analisará o próprio código da classe e criará os stubs necessários. Você não precisa chamar o método Mockito.mock()
. Uma anotação e o objeto virtual está pronto. Beleza.
2.2 Anotação @Spy
O segundo tipo importante de objetos no Mockito são wrappers sobre objetos existentes. Eles permitem, por um lado, usar classes existentes e, por outro lado, interceptar chamadas para todos os métodos e variáveis de tais objetos: corrigir seu trabalho quando necessário. Eles são usados com a mesma frequência que os objetos Mock.
Para criar um wrapper sobre um objeto, você precisa escrever o código:
ClassName variable name = Mockito.spy(an object);
Um exemplo com um wrapper em torno da classe ArrayList:
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Test
public void whenMockAnnotation() {
List<String> mockList = Mockito.spy(new ArrayList<String>());
//these methods will work!
mockList.add("one");
mockList.add("two");
}
}
Em sua forma mais simples, uma chamada para um objeto wrapper simplesmente redireciona as chamadas para o objeto original, cuja referência ele mantém dentro de si . Tudo funcionará exatamente como com o objeto original.
Você também pode criar um wrapper usando a anotação - @Spy
.
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Spy
List mockList = new ArrayList<String>();
@Test
public void whenMockAnnotation() {
// these methods will work!
mockList.add("one");
mockList.add("two");
}
}
Esses dois exemplos de código são equivalentes.
GO TO FULL VERSION