Umanyano 5 sisizukulwana esilandelayo seJUnit. Injongo kukwenza isiseko esisexesheni sovavanyo lwecala lonjiniyela kwiJVM. Oku kubandakanya ukugxila kwiJava 8 nangaphezulu, kunye nokwenza iindlela ezahlukeneyo zovavanyo.
Ungazisebenzisa zombini iMaven kunye neGradle.
Ukuba usebenzisa i-Maven, kuya kufuneka ukongeza ukuxhomekeka koku kulandelayo pom.xml
ifayile:
org.junit.jupiter
junit-jupiter-api
5.3.1
test
org.junit.jupiter
junit-jupiter-params
5.3.1
test
Uya kuqaphela ukuba kwiJunit 5, olona tshintsho lucacileyo kukuba iiklasi zovavanyo kunye neendlela akusafuneki zibekho esidlangalaleni.
Ngoku, masidlule kuluhlu lwezona zichazi ziqhelekileyo zeJUnit 5.
Esi sichazi sichaza ukuba indlela yindlela yovavanyo. Qaphela ukuba esi sichazi asithathi naliphi na uphawu.
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {
@Test
void helloJUnit5() {
assertEquals(10, 5+5);
} }
Uvavanyo lweparameter luyenza ukuba ikwazi ukuqhuba uvavanyo amaxesha amaninzi ngeempikiswano ezahlukeneyo. Babhengezwe njengesiqhelo @Test
iindlela kodwa sebenzisa @ParameterizedTest
isichaso endaweni yoko.
Ukongeza, kuya kufuneka ubhengeze ubuncinci umthombo omnye oya kuthi ubonelele ngeempikiswano kwisicelo ngasinye emva koko usebenzise iimpikiswano kwindlela yovavanyo.
Umzekelo, lo mzekelo ulandelayo ubonakalisa uvavanyo olwenziweyo olusebenzisa @ValueSource
Isichazi sokuchaza uluhlu lomtya njengomthombo wempikiswano.
Umzekelo:
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.junit.jupiter.api.Assertions.assertTrue; class JUnit5Test {
@ParameterizedTest
@ValueSource(strings = { 'cali', 'bali', 'dani' })
void endsWithI(String str) {
assertTrue(str.endsWith('i'));
} }
I-JUnit 5 inesakhono sokuphinda uvavanyo inani elichaziweyo lamaxesha ngokuchaza indlela nge @RepeatedTest
kwaye ucacise inani elipheleleyo lokuphindaphinda okunqwenelekayo.
Isicelo ngasinye sovavanyo oluphindaphindiweyo luziphatha njengokuqhutywa kwesiqhelo @Test
indlela.
Oku kuluncedo ngakumbi kuvavanyo lwe-UI ngeSelenium.
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.RepetitionInfo; import org.junit.jupiter.api.TestInfo; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {
@RepeatedTest(value = 5, name = '{displayName} {currentRepetition}/{totalRepetitions}')
@DisplayName('RepeatingTest')
void customDisplayName(RepetitionInfo repInfo, TestInfo testInfo) {
int i = 3;
System.out.println(testInfo.getDisplayName() +
'-->' + repInfo.getCurrentRepetition()
);
assertEquals(repInfo.getCurrentRepetition(), i);
} }
Njengoko ubona kwiziphumo zovavanyo, xa i==3
, uvavanyo ludlula, kungenjalo iyasilela.
Iiklasi zovavanyo kunye neendlela zovavanyo zinokuchaza amagama abonisa isiko aya kuboniswa ngabagijimi bovavanyo kunye neengxelo zovavanyo.
Umzekelo:
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @DisplayName('DisplayName Demo') class JUnit5Test {
@Test
@DisplayName('Custom test name')
void testWithDisplayName() {
}
@Test
@DisplayName('Print test name')
void printDisplayName(TestInfo testInfo) {
System.out.println(testInfo.getDisplayName());
} }
I @BeforeEach
Isichazi-magama sichaza ukuba indlela echaziweyo kufuneka yenziwe phambi kwendlela nganye yovavanyo, efana neJUnit 4's @Before
.
Umzekelo:
import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeEach
void init(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }
Iziphumo:
firstTest 1 secondTest 2
Esi sichazi sichaza ukuba indlela echaziweyo kufuneka yenziwe emva kovavanyo lwendlela nganye, ehambelana neJUnit 4's @After
. Umzekelo, ukuba iimvavanyo zifuna ukuseta kwakhona ipropathi emva kovavanyo ngalunye, sinokuthi sichaze indlela nge @AfterEach
kuloo msebenzi.
import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterEach
void after(TestInfo testInfo) {
String callingTest = testInfo.getTestMethod().get().getName();
System.out.println(callingTest);
} }
Iziphumo:
1 firstTest 2 secondTest
Esi sichazi sisebenzisa indlela phambi kwazo zonke iimvavanyo. Oku kuthelekiswa neJUnit 4's @BeforeClass
. I @BeforeAll
Isichaso sisetyenziselwa ukwenza izinto ezahlukeneyo zovavanyo.
Umzekelo:
import org.junit.jupiter.api.*; class JUnit5Test {
@BeforeAll
static void init() {
System.out.println('Only run once before all tests');
}
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
} }
Iziphumo:
Only run once before all tests 1 2
I @AfterAll
Isichazi-magama sisetyenziselwa ukwenza indlela echaziweyo, kuphela emva kokuba kwenziwe zonke iimvavanyo. Oku kuthelekiswa neJUnit 4's @AfterClass
. Sisebenzisa esi sichazi-magama ukudiliza okanye ukuphelisa zonke iinkqubo ekupheleni kwazo zonke iimvavanyo.
Umzekelo:
import org.junit.jupiter.api.*; class JUnit5Test {
@Test
void firstTest() {
System.out.println(1);
}
@Test
void secondTest() {
System.out.println(2);
}
@AfterAll
static void after() {
System.out.println('Only run once after all tests');
} }
Iziphumo:
1 2 Only run once after all tests
Singasisebenzisa esi sichazi ukubhengeza iithegi zovavanyo lokucoca, nokuba kukwinqanaba okanye kwinqanaba lendlela.
I @Tag
Isichazi-magama siluncedo xa sifuna ukwenza ipakethe yovavanyo kunye neemvavanyo ezikhethiweyo.
Umzekelo:
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @Tag('smoke') class JUnit5Test {
@Test
@Tag('login')
void validLoginTest() {
}
@Test
@Tag('search')
void searchTest() {
} }
I @Disabled
Isichazi-magama sisetyenziselwa ukukhubaza okanye ukweqa iimvavanyo kwinqanaba leklasi okanye lendlela. Oku kuthelekiswa neJUnit 4's @Ignore
.
Xa kubhengezwe kwinqanaba leklasi, zonke @test
iindlela zitsibiwe. Xa sisebenzisa @Disabled
kwinqanaba lendlela, kuphela yindlela echaziweyo ekhubazekileyo.
Umzekelo:
@Disabled
usetyenziselwa ukukhubaza iklasi yovavanyo:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class DisabledClassDemo {
@Test
void testWillBeSkipped() {
} }
Umzekelo:
@Disabled
Isichazi esetyenziselwa ukukhubaza indlela yovavanyo:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
} }