JUnit 5 er næsta kynslóð af JUnit. Markmiðið er að skapa nýjan grunn fyrir prófanir verktakahliðar á JVM. Þetta felur í sér að einbeita sér að Java 8 og nýrri útgáfu, auk þess að gera kleift að prófa marga mismunandi stíl.
Þú getur notað bæði Maven og Gradle.
Ef þú ert að nota Maven þarftu að bæta eftirfarandi ósjálfstæði við pom.xml
skrá:
org.junit.jupiter
junit-jupiter-api
5.3.1
test
org.junit.jupiter
junit-jupiter-params
5.3.1
test
Þú munt taka eftir því að í 5. júní er ein augljósasta breytingin sú að prófflokkar og aðferðir þurfa ekki að vera opinberar lengur.
Nú skulum við fara í gegnum listann yfir algengustu athugasemdir JUnit 5.
Þessi skýring sýnir að aðferð er prófunaraðferð. Athugið að þessi skýring tekur enga eiginleika.
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {
@Test
void helloJUnit5() {
assertEquals(10, 5+5);
} }
Parameterized próf gera það mögulegt að keyra próf oft með mismunandi rökum. Þeim er lýst eins og venjulegum @Test
aðferðir en notaðu @ParameterizedTest
skýring í staðinn.
Að auki verður þú að lýsa yfir að minnsta kosti einni heimild sem færir rök fyrir hverri ákalli og neyta síðan rökanna í prófunaraðferðinni.
Til dæmis sýnir eftirfarandi dæmi breytupróf sem notar @ValueSource
skýring til að tilgreina strengjafylki sem uppsprettu röksemda.
Dæmi:
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'));
} }
JUnit 5 hefur getu til að endurtaka próf í tilteknum sinnum einfaldlega með því að skrifa athugasemd við aðferð með @RepeatedTest
og tilgreina heildarfjölda endurtekninga sem óskað er eftir.
Hver ákall endurtekinnar prófs hagar sér eins og framkvæmd venjulegs @Test
aðferð.
Þetta er sérstaklega gagnlegt við prófanir á HÍ með Selen.
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);
} }
Eins og sjá má af niðurstöðu prófsins, þegar i==3
, stenst prófið, annars tekst það ekki.
Prófflokkar og prófunaraðferðir geta lýst yfir sérsniðnum skjáheitum sem verða birt af prófhlaupurum og prófskýrslum.
Dæmi:
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());
} }
The @BeforeEach
skýring merkir að aðgreinda aðferðina eigi að framkvæma fyrir hverja prófunaraðferð, hliðstætt JUnit 4 | | + + _ |
Dæmi:
@Before
Framleiðsla:
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);
} }
Þessi skýring táknar að tilgreina ætti aðferðina eftir hverja prófunaraðferð, hliðstæð JUnit 4 | | + + | | Til dæmis, ef prófin þurfa að endurstilla eign eftir hverja prófun, getum við gert athugasemd við aðferð með firstTest 1 secondTest 2
fyrir það verkefni.
@After
Framleiðsla:
@AfterEach
Þessi skýring framkvæmir aðferð fyrir öll próf. Þetta er hliðstætt JUnit 4’s import org.junit.jupiter.api.*; class JUnit5Test {
. The
@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);
} } 1 firstTest 2 secondTest
athugasemd er venjulega notuð til að frumstilla ýmislegt fyrir prófin.
Dæmi:
@BeforeClass
Framleiðsla:
@BeforeAll
The import org.junit.jupiter.api.*; class JUnit5Test {
skýring er notuð til að framkvæma athugasemdina aðferðina, aðeins eftir að öll próf hafa verið framkvæmd. Þetta er hliðstætt JUnit 4’s
@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);
} } Only run once before all tests 1 2
. Við notum þessa skýringu til að rífa niður eða ljúka öllum ferlum í lok allra prófa.
Dæmi:
@AfterAll
Framleiðsla:
@AfterClass
Við getum notað þessa skýringu til að lýsa yfir merki til síunarprófa, annað hvort á bekknum eða aðferðarstigi.
The import org.junit.jupiter.api.*; class JUnit5Test {
skýring er gagnleg þegar við viljum búa til prófapakka með völdum prófum.
@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');
} }
Dæmi:
1 2 Only run once after all tests
The @Tag
athugasemd er notuð til að slökkva eða sleppa prófum á bekknum eða aðferðarstigi. Þetta er hliðstætt JUnit 4’s 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() {
} }
Þegar lýst er yfir á bekkjarstigi, eru allir @Disabled
aðferðum er sleppt. Þegar við notum @Ignore
á aðferðarstiginu er aðeins skýringarmyndin gerð óvirk.
Dæmi:
@test
notað til að slökkva á prófflokki:
@Disabled
Dæmi:
@Disabled
skýring notuð til að slökkva á prófunaraðferð:
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class DisabledClassDemo {
@Test
void testWillBeSkipped() {
} }