Forskjellen mellom @Mock og @InjectMocks
Hva er forskjellen mellom @Mock
og @InjectMocks
i Mockito-rammeverket?
400
3
Hva er forskjellen mellom @Mock
og @InjectMocks
i Mockito-rammeverket?
@Mock
oppretter en mock.@InjectMocks
oppretter en forekomst av klassen og injiserer mocks som er opprettet med@Mock
(eller@Spy
) annotasjonene i denne forekomsten.Merk at du må bruke
@RunWith(MockitoJUnitRunner.class)
ellerMockito.initMocks(this)
for å initialisere disse mockene og injisere dem.@Mock
-annotasjonen etterligner det aktuelle objektet.Annotasjonen
@InjectMocks
gjør det mulig å injisere de ulike (og relevante) mockene som er opprettet av@Mock
i det underliggende objektet.**Begge er komplementære.
Et "mocking framework", som Mockito er basert på, er et rammeverk som gir deg muligheten til å lage Mock-objekter (i gamle dager kunne disse objektene kalles shunts, da de fungerer som shunts for avhengig funksjonalitet). Med andre ord, et mock-objekt brukes til å imitere det virkelige objektet som koden din er avhengig av, du lager et proxy-objekt med mocking-rammeverket. Ved å bruke mock-objekter i testene dine går du fra vanlig enhetstesting til integrasjonstesting.
Mockito er et testrammeverk med åpen kildekode for Java som er utgitt under MIT-lisensen. Det er et "mocking"-rammeverk som lar deg skrive flotte tester med et rent og enkelt API. Det finnes mange forskjellige mocking-rammeverk i Java, men det er i hovedsak to hovedtyper av mock-rammeverk, de som implementeres via proxy og de som implementeres via class remapping.
Med rammeverk for avhengighetsinjeksjon, som Spring, kan du injisere proxy-objekter uten å endre koden. Mock-objektet forventer at en bestemt metode skal kalles og returnerer et forventet resultat.
Annotasjonen
@InjectMocks
forsøker å instansiere testobjektet og injiserer felter annotert med@Mock
eller@Spy
i private felter i testobjektet.MockitoAnnotations.initMocks(this)
-kallet tilbakestiller testobjektet og initialiserer mocks på nytt, så husk å ha dette i@Before
/@BeforeMethod
-annotasjonen.