JUnit 5 Bilješke s primjerima

JUNITET 5 je sljedeća generacija JUnit-a. Cilj je stvoriti ažurne temelje za testiranje na JVM-u sa strane programera. To uključuje fokusiranje na Javu 8 i novije verzije, kao i omogućavanje mnogih različitih stilova testiranja.

Možete koristiti i Maven i Gradle.

Ako koristite Maven, morate dodati sljedeću ovisnost u svoj pom.xml datoteka:



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


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

@JUnit 5 Bilješke

Primijetit ćete da je u 5. lipnja jedna od najočitijih promjena da klase i metode ispitivanja više ne moraju biti javne.

Prođimo sada kroz listu najčešćih bilješki JUnit 5.

@Test

Ova napomena označava da je metoda ispitna metoda. Imajte na umu da ova napomena ne sadrži nikakve atribute.



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

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

@ParameterizedTest

Parametrizirani testovi omogućuju višestruko pokretanje testa s različitim argumentima. Deklariraju se kao i redovni @Test metode, ali koristite @ParameterizedTest umjesto toga bilješka.

Osim toga, morate prijaviti barem jedan izvor koji će pružiti argumente za svaki poziv, a zatim potrošiti argumente u testnoj metodi.

Na primjer, sljedeći primjer pokazuje parametarski test koji koristi @ValueSource napomena za specificiranje niza String kao izvora argumenata.

Primjer:

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 ima mogućnost ponavljanja testa određeni broj puta jednostavnim označavanjem metode s @RepeatedTest i određivanje ukupnog broja željenih ponavljanja.

Svako pozivanje ponovljenog testa ponaša se poput izvršavanja redovnog @Test metoda.

To je osobito korisno u testiranju korisničkog sučelja sa selenom.

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

Kao što možete vidjeti iz rezultata testa, kada i==3 test prođe, inače ne uspije.

@DisplayName

Test klase i metode ispitivanja mogu deklarirati prilagođena imena prikaza koja će prikazati trkači i izvješća o ispitivanju.

Primjer:

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

@BeforeEach

The @BeforeEach napomena označava da se označena metoda treba izvršiti prije svake ispitne metode, analogno JUnit-u 4 @Before

Primjer:

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

Izlaz:

firstTest 1 secondTest 2

@AfterEach

Ova napomena označava da se označena metoda treba izvršiti nakon svake ispitne metode, analogno JUnit 4-u @After Na primjer, ako testovi trebaju resetirati svojstvo nakon svakog testa, možemo označiti metodu s @AfterEach za taj zadatak.

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

Izlaz:

1 firstTest 2 secondTest

@BeforeAll

Ova napomena izvršava metodu prije svih testova. Ovo je analogno JUnit 4-u @BeforeClass. The @BeforeAll napomena se obično koristi za inicijalizaciju raznih stvari za testove.

Primjer:

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

Izlaz:

Only run once before all tests 1 2

@Nakon svega

The @AfterAll anotacija se koristi za izvršavanje anotirane metode, tek nakon izvršavanja svih testova. Ovo je analogno JUnit 4-u @AfterClass . Ovu bilješku koristimo za rušenje ili završavanje svih procesa na kraju svih testova.

Primjer:

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

Izlaz:

1 2 Only run once after all tests

@Označiti

Ovu bilješku možemo koristiti za deklariranje oznaka za filtriranje testova, bilo na razini klase ili metode.

The @Tag napomena je korisna kada želimo stvoriti testni paket s odabranim testovima.

Primjer:

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

@Onemogućeno

The @Disabled napomena se koristi za onemogućavanje ili preskakanje testova na razini klase ili metode. Ovo je analogno JUnit 4-u @Ignore.

Kad se deklariraju na razini klase, svi @test metode se preskaču. Kada koristimo @Disabled na razini metode onemogućena je samo označena metoda.

Primjer:

@Disabled koristi se za onemogućavanje test klase:

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

Primjer:

@Disabled napomena koja se koristi za onemogućavanje metode ispitivanja:

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