ЈУНИТ 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 напомена.
Ова напомена означава да је метода тест метода. Имајте на уму да ова напомена не садржи никакве атрибуте.
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() {
} }