2.1 @Slötkommentar
Det finns två sätt att arbeta med skenobjekt i Mockito. Det första är att skapa ett helt virtuellt objekt , det andra är att linda in ett befintligt objekt i ett omslag. Låt oss börja med den första.
För att skapa ett helt virtuellt objekt måste du skriva koden:
ClassName variable name = Mockito.mock(ClassName.class);
Låt oss skapa en mock ArrayList-klass som ett exempel:
@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");
}
}
I det här exemplet skapar vi en falsk ArrayList och lagrar en referens till den i mockList-variabeln. Metoderna för detta objekt gör ingenting.
Förresten, den här koden kan skrivas ännu kortare, eftersom det finns en speciell anteckning för detta @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");
}
}
I det andra fallet MockitoExtension
kommer den att analysera själva klasskoden och skapa de nödvändiga stubbarna. Du behöver inte anropa metoden Mockito.mock()
. En anteckning och det virtuella objektet är klart. Skönhet.
2.2 @Spy-anteckning
Den andra viktiga typen av objekt i Mockito är omslag över befintliga objekt. De tillåter å ena sidan att använda befintliga klasser, och å andra sidan att fånga upp anrop till alla metoder och variabler för sådana objekt: att korrigera deras arbete där det behövs. De används lika ofta som Mock-objekt.
För att skapa ett omslag över ett objekt måste du skriva koden:
ClassName variable name = Mockito.spy(an object);
Ett exempel med ett omslag runt ArrayList-klassen:
@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");
}
}
I sin enklaste form, omdirigerar ett anrop till ett wrapper-objekt helt enkelt anrop till det ursprungliga objektet, referensen till vilket det håller i sig självt . Allt kommer att fungera precis som med originalobjektet.
Du kan också skapa ett omslag med anteckningen - @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");
}
}
Dessa två kodexempel är likvärdiga.
GO TO FULL VERSION