Ühikutesti eesmärk on tuvastada rakenduses esinevad vead niipea kui võimalik. Kuigi mitu kanalit võivad teid viia sama eesmärgini, peaksite püüdma kasutada kõige tõhusamat marsruuti.
JUniti testikomplektis võib olla mitu testiklassi, mis vajavad samu andmeid, kuid te ei saa testandmeid uuesti kasutada. JUniti eelmistes versioonides oli hea lähenemisviis luua utiliitmeetod ja kutsuda see meetod iga kord, kui testklass oma andmeid vajas.
JUnit 5 pakub sellele probleemile tõhusamat lähenemisviisi: sõltuvuse süstimine (DI).
Mis on sõltuvuse süstimine?
DI on kujundusmuster, kus objekt pakub sõltuvusi teisest objektist. Java-rakenduse loomisel võib teil olla klass, mis sõltub objektist, mille teine klass oma funktsiooni täitmiseks loob.
Enne sõltuvuse süstimist peate teisest klassist objekti kasutamiseks looma selle objekti uue eksemplari sellest sõltuvas klassis. Seega, kui teil oleks mitu klassi, mis sõltuvad samast objektist, peaksite sõltuvates klassides looma mitu selle eksemplari.
DI võimaldab kasutada objekti sõltuvas klassis ilma sellesse klassi uut eksemplari looma.
Sõltuvussüst JUnitis 5
JUnit 5 võimaldab sisestada sõltuvusi nii testimeetoditesse kui ka konstruktoritesse. See on oluline, kuna raamistiku eelmised versioonid ei võimaldanud testimismeetoditel ega konstruktoritel parameetreid omada.
JUnit 5 võimaldab teil sisestada nii palju parameetreid, kui soovite. Ainus konks on see, et ParameterResolver API peab suutma iga parameetri tööajal lahendada. JUnitil on praegu kolm sisseehitatud parameetrite lahendajat, mida ta kasutab automaatselt. Mis tahes muu lahendaja kasutamiseks peate selle selgesõnaliselt registreerima, kasutades @ExtendWith annotatsiooni.
Sõltuvuste süstimine JUnitis
See näidisprogramm kasutab ühte JUniti sisseehitatud parameetritest (TestInfoParameterResolver), et näidata, kuidas saate sisestada sõltuvust JUnit 5 test. TestInfoParameterResolver lahendab TestInfo liidesesse kuuluvad objektid. Seega annab JUnit 5 TestInfo liidese eksemplari igale meetodile või konstruktorile, mis seda kasutab.
importidastaatiline org.junit.jupiter.api. Väited.*;
importida org.junit.jupiter.api. Kuvanimi;
importida org.junit.jupiter.api. Test;
importida org.junit.jupiter.api. TestInfo;klassInfoTestInterfaceTest{
// TestInfo objekti sisestamine InfoTestInterfaceTesti konstruktorisse
InfoTestInterfaceTest (TestInfo testInfo) {
assertEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}// TestInfo objekti sisestamine meetoditesse
@Test
tühinetestMethodName(TestInfo testInfo){
assertEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}
@Test
@DisplayName("meetod kasutades @DisplayName annotatsioon")
tühinetestMeetodNimiKaks(TestInfo testInfo){
assertEquals("meetod kasutades @DisplayName annotatsioon", testInfo.getDisplayName());
}
}
Ülaltoodud JUniti test näitab, kuidas objekt konstruktorisse sisestada ja kahte meetodit. The JUnit TestInfo liidesel on neli meetodit, mida saate selle objektiga kasutada.
Meetod getDisplayName() on kõige kasulikum. See tagastab praeguse katsemeetodi või konstruktori kuvatava nime. Vaikimisi põhineb see nimi klassil. Aga kui kasutad @DisplayName märkus, tagastab meetod getDisplayName() selle teksti asemel.
Ülaltoodud katseklass loob järgmise testiaruande:
Kasutage DI-d meetodites @Before ja @After
Sõltuvusi toetavaid JUniti märkustega meetodeid on veel nelja tüüpi. Need on märkused @BeforeAll, @BeforeEach, @AfterAll ja @AfterEach. Sarnaselt @Test-meetodile on teil vaja ainult objekt parameetrina edastada mis tahes meetodile enne või pärast, ja oletegi valmis.
Märkused @Before ja @After on olulised, kuna need aitavad teil ka tõhusamat testkoodi välja töötada. Võimalus lisada nendesse meetoditesse ka sõltuvusi parandab teie testkoodi veelgi.