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