JUnit 5 Anotasi Karo Tuladhane

JUnit 5 minangka generasi sabanjure JUnit. Tujuane yaiku nggawe dhasar paling anyar kanggo tes sisi pangembang ing JVM. Iki kalebu fokus ing Java 8 lan ndhuwur, uga ngaktifake macem-macem gaya pengujian.

Sampeyan bisa nggunakake Maven lan Gradle.

Yen sampeyan nggunakake Maven, sampeyan kudu nambah katergantungan ing ngisor iki menyang pom.xml file:




org.junit.jupiter
junit-jupiter-api
5.3.1
test


org.junit.jupiter
junit-jupiter-params
5.3.1
test


@JUnit 5 Annotasi

Sampeyan bakal sok dong mirsani yen ing Junit 5, salah sawijining pangowahan sing jelas yaiku yen kelas tes lan metode ora kudu umum.

Saiki, ayo goleki dhaptar Annotasi JUnit 5 sing paling umum.


@Test

Anotasi iki nuduhake manawa metode minangka metode tes. Elinga anotasi iki ora duwe atribut.



import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class JUnit5Test {

@Test
void helloJUnit5() {
assertEquals(10, 5+5);
} }

@ParameterizedTest

Tes parameter bisa nggawe tes kaping pirang-pirang kanthi bantahan sing beda. Dheweke diumumake kaya biasa @Test cara nanging nggunakake @ParameterizedTest minangka anotasi.

Kajaba iku, sampeyan kudu ngumumake paling ora siji sumber sing bakal menehi argumen kanggo saben panyuwunan banjur nggunakake bantahan ing metode tes.

Contone, conto ing ngisor iki nuduhake tes parameter sing nggunakake @ValueSource anotasi kanggo nemtokake macem-macem String minangka sumber argumen.


Tuladha:

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'));
} }

@RepeatedTest

JUnit 5 nduweni kemampuan kanggo mbaleni tes kaping pirang-pirang wektu kanthi mung nyathet metode nganggo @RepeatedTest lan nemtokake jumlah total repetisi sing dikarepake.

Saben invasi tes bola-bali tumindak kaya eksekusi @Test cara

Iki migunani banget ing tes UI karo Selenium.


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);
} }

Kaya sing sampeyan ngerteni saka asil tes, nalika i==3, tes kasebut liwati, yen ora bakal gagal.

@DisplayName

Kelas tes lan metode tes bisa ngumumake jeneng tampilan khusus sing bakal ditampilake dening pelari tes lan laporan tes.

Tuladha:


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());
} }

@Dewahoya

Sing @BeforeEach anotasi nuduhake manawa metode anotasi kudu dileksanakake sadurunge saben metode tes, padha karo JUnit 4's @Before.

Tuladha:

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);
} }

Output:

firstTest 1 secondTest 2

@AfterEach

Anotasi iki nuduhake manawa metode anotasi kudu dileksanakake sawise saben metode tes, padha karo JUnit 4's @After. Contone, yen tes kudu ngreset properti sawise saben tes, kita bisa nyathet metode kanthi @AfterEach kanggo tugas kasebut.


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);
} }

Output:

1 firstTest 2 secondTest

@Dewahoya

Anotasi iki nglakokake metode sadurunge kabeh tes. Iki padha karo JUnit 4's @BeforeClass. Sing @BeforeAll anotasi biasane digunakake kanggo miwiti macem-macem prekara kanggo tes.

Tuladha:

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);
} }

Output:

Only run once before all tests 1 2

@AfterAll

Sing @AfterAll anotasi digunakake kanggo nglakokake metode anotasi, mung sawise kabeh tes dileksanakake. Iki padha karo JUnit 4's @AfterClass . Kita nggunakake anotasi iki kanggo ngrusak utawa mungkasi kabeh proses ing pungkasan kabeh tes.

Tuladha:

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');
} }

Output:

1 2 Only run once after all tests

@Tag

Kita bisa nggunakake anotasi iki kanggo ngumumake tag kanggo nyaring tes, ing tataran kelas utawa metode.

Sing @Tag anotasi migunani yen pengin nggawe paket tes kanthi tes sing dipilih.

Tuladha:

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() {
} }

@Diskandar

Sing @Disabled anotasi digunakake kanggo mateni utawa nglumpati tes ing kelas utawa level metode. Iki padha karo JUnit 4's @Ignore.

Yen diumumake ing level kelas, kabeh @test cara dilewati. Nalika digunakake @Disabled ing level metode, mung cara anotasi sing dipateni.

Tuladha:

@Disabled digunakake kanggo mateni kelas tes:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @Disabled class DisabledClassDemo {
@Test
void testWillBeSkipped() {
} }

Tuladha:

@Disabled anotasi digunakake kanggo mateni cara tes:

import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; class DisabledTestsDemo {
@Disabled
@Test
void testWillBeSkipped() {
}
@Test
void testWillBeExecuted() {
} }