ЈУнит 5 Биљешке са примјерима

ЈУНИТ 5 је следећа генерација ЈУнит-а. Циљ је створити најновију основу за тестирање на ЈВМ-у са стране програмера. То укључује фокусирање на Јаву 8 и новије верзије, као и омогућавање многих различитих стилова тестирања.

Можете користити и Мавен и Градле.

Ако користите Мавен, морате додати следећу зависност у свој pom.xml датотека:




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


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


@ЈУнит 5 Биљешке

Приметићете да је у 5. јуну једна од најочигледнијих промена да класе и методе испитивања више не морају бити јавне.

Сада, прођимо кроз листу најчешћих ЈУнит 5 напомена.


@Тест

Ова напомена означава да је метода тест метода. Имајте на уму да ова напомена не садржи никакве атрибуте.

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

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

@ПараметеризедТест

Параметарски тестови омогућавају покретање теста више пута са различитим аргументима. Они су проглашени као редовни @Test методе, али користите @ParameterizedTest анотација уместо тога.

Поред тога, морате пријавити најмање један извор који ће пружити аргументе за сваки позив, а затим потрошити аргументе у тест методи.

На пример, следећи пример приказује параметризовани тест који користи @ValueSource напомена за специфицирање низа Стринг као извора аргумената.


Пример:

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

@РепеатедТест

ЈУнит 5 има могућност понављања теста одређени број пута једноставним означавањем методе са @RepeatedTest и одређивање укупног броја жељених понављања.

Свако позивање поновљеног теста понаша се попут извршавања редовног @Test метода.

Ово је посебно корисно у тестирању корисничког интерфејса са селеном.


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

Као што видите из резултата теста, када i==3 тест прође, иначе не успе.

@Показати име

Класе испитивања и методе испитивања могу да декларишу прилагођена имена приказа која ће приказати тркачи и извештаји о тестирању.

Пример:


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 анотација означава да анотирани метод треба извршити пре сваке тест методе, аналогно ЈУнит 4-у @Before

Пример:

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

Излаз:

firstTest 1 secondTest 2

@АфтерЕацх

Ова напомена означава да означени метод треба да се изврши након сваке испитне методе, аналогно ЈУнит 4-у @After. На пример, ако тестови треба да ресетују својство након сваког теста, можемо да означимо метод са @AfterEach за тај задатак.


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

Излаз:

1 firstTest 2 secondTest

@БефореАлл

Ова напомена извршава метод пре свих тестова. Ово је аналогно ЈУнит 4-у @BeforeClass. Тхе @BeforeAll напомена се обично користи за иницијализацију различитих ствари за тестове.

Пример:

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

Излаз:

Only run once before all tests 1 2

@После свега

Тхе @AfterAll анотација се користи за извршавање анотиране методе, тек након извршавања свих тестова. Ово је аналогно ЈУнит 4-у @AfterClass . Ову напомену користимо да срушимо или завршимо све процесе на крају свих тестова.

Пример:

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

Излаз:

1 2 Only run once after all tests

@Таг

Ову напомену можемо користити за декларацију ознака за филтрирање тестова, било на нивоу класе или методе.

Тхе @Tag напомена је корисна када желимо да направимо тестни пакет са изабраним тестовима.

Пример:

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

@Дисаблед

Тхе @Disabled напомена се користи за онемогућавање или прескакање тестова на нивоу класе или методе. Ово је аналогно ЈУнит 4-у @Ignore.

Када се декларишу на нивоу класе, сви @test методе се прескачу. Када користимо @Disabled на нивоу методе онемогућен је само означени метод.

Пример:

@Disabled користи се за онемогућавање тест класе:

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

Пример:

@Disabled напомена која се користи за онемогућавање методе испитивања:

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