Yksikkötestin tarkoituksena on tunnistaa sovelluksen virheet mahdollisimman pian. Vaikka useat kanavat saattavat johtaa samaan tavoitteeseen, sinun tulee pyrkiä käyttämään tehokkainta reittiä.
JUnit-testisarjassa voi olla useita testiluokkia, jotka tarvitsevat samoja tietoja, mutta et voi käyttää testitietoja uudelleen. Aiemmissa JUnitin versioissa hyvä tapa oli luoda apumenetelmä ja kutsua sitä sitten aina, kun testiluokka tarvitsi tietojaan.
JUnit 5 tarjoaa tehokkaamman lähestymistavan tähän ongelmaan: riippuvuusinjektio (DI).
Mikä on riippuvuusinjektio?
DI on suunnittelumalli, jossa objekti tarjoaa riippuvuuksia toisesta objektista. Kun rakennat Java-sovellusta, sinulla saattaa olla luokka, joka riippuu objektista, jonka toinen luokka luo suorittaakseen tehtävänsä.
Ennen riippuvuuden lisäystä, jotta voit käyttää objektia toisesta luokasta, sinun on luotava kyseisestä objektista uusi esiintymä siitä riippuvassa luokassa. Joten jos sinulla oli useita luokkia, jotka riippuvat samasta objektista, sinun on luotava siitä useita esiintymiä riippuvaisten luokkien sisällä.
DI: n avulla voit käyttää riippuvaisessa luokassa olevaa objektia luomatta siitä uutta esiintymää kyseisessä luokassa.
Riippuvuusinjektio JUnit 5:ssä
JUnit 5:n avulla voit lisätä riippuvuuksia sekä testimenetelmiin että konstruktoreihin. Tämä on merkittävää, koska viitekehyksen aiemmat versiot eivät sallineet testausmenetelmien tai rakentajien parametreja.
JUnit 5 antaa sinun pistää niin monta parametria kuin haluat. Ainoa saalis on, että ParameterResolver API: n on kyettävä ratkaisemaan jokainen parametri ajon aikana. JUnitissa on tällä hetkellä kolme sisäänrakennettua parametrien ratkaisijaa, joita se käyttää automaattisesti. Jos haluat käyttää mitä tahansa muuta ratkaisijaa, sinun on rekisteröitävä se nimenomaisesti @ExtendWith-merkinnällä.
Riippuvuuksien pistäminen JUnitissa
Tämä esimerkkiohjelma käyttää yhtä JUnitin sisäänrakennetuista parametreista (TestInfoParameterResolver) osoittaakseen, kuinka voit lisätä riippuvuuden JUnit 5 testi. TestInfoParameterResolver ratkaisee objektit, jotka kuuluvat TestInfo-liittymään. Joten JUnit 5 toimittaa TestInfo-rajapinnan esiintymän mille tahansa menetelmälle tai rakentajalle, joka käyttää sitä.
tuontistaattinen org.junit.jupiter.api. Väitteet.*;
tuonti org.junit.jupiter.api. Näyttönimi;
tuonti org.junit.jupiter.api. Testata;
tuonti org.junit.jupiter.api. TestInfo;luokkaaInfoTestInterfaceTest{
// TestInfo-objektin lisääminen InfoTestInterfaceTest-konstruktoriin
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}// TestInfo-objektin lisääminen menetelmiin
@Testata
mitätöntestMethodName(TestInfo testInfo){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}
@Testata
@Näyttönimi("menetelmä käyttäen @Näyttönimi huomautus")
mitätöntestimenetelmäNimiKaksi(TestInfo testInfo){
assertEquals("menetelmä käyttäen @Näyttönimi huomautus", testInfo.getDisplayName());
}
}
Yllä oleva JUnit-testi osoittaa, kuinka objekti injektoidaan konstruktoriin ja kaksi menetelmää. The JUnit TestInfo käyttöliittymässä on neljä menetelmää, joita voit käyttää sen objektin kanssa.
GetDisplayName()-menetelmä on hyödyllisin. Se palauttaa nykyisen testimenetelmän tai konstruktorin näyttönimen. Oletusarvoisesti tämä nimi perustuu luokkaan. Mutta jos käytät @DisplayName-merkintä, getDisplayName()-metodi palauttaa kyseisen tekstin sen sijaan.
Yllä oleva testiluokka luo seuraavan testiraportin:
Käytä DI: tä @Ennen- ja @Jälkeen-menetelmissä
On olemassa neljä muuta JUnit-merkinnöillä varustettua menetelmää, jotka tukevat riippuvuuksia. Nämä ovat @BeforeAll-, @BeforeEach-, @AfterAll- ja @AfterEach-merkinnät. Kuten @Test-menetelmässä, sinun tarvitsee vain siirtää objekti jollekin ennen tai jälkeen -metodeista parametrina, ja olet valmis.
@Before- ja @After-merkinnät ovat tärkeitä, koska ne auttavat myös kehittämään tehokkaampaa testikoodia. Mahdollisuus lisätä riippuvuuksia näihin menetelmiin parantaa edelleen testikoodiasi.