JavaRush /Kurslar /All lectures for UZ purposes /Junit Parametrizatsiyalangan Testlar

Junit Parametrizatsiyalangan Testlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

5.1 @ParameterizedTest annotatsiyasi

Ba'zida testni turli parametrlar bilan bir necha marta chaqirishni xohlaysiz: turli qiymatlar, turli kirish parametrlari, turli foydalanuvchilar nomlari. JUnit sizning hayotingizni yengillashtirishga intiladi, shuning uchun parametrizatsiyalangan testlar kabi narsalar mavjud.

Parametrizatsiyalangan testlardan foydalanish uchun sizning pom.xml faylingizga qo'shimcha bog'lanish qo'shishingiz kerak:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>

Shundan so'ng misolni ko'rib chiqamiz:


@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethod(int argument) {
    //test code
}
 
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Har bir test metodi 3 marta chaqiriladi va har bir chaqiruvda unga navbatdagi parametr yuboriladi. Qiymatlar boshqa annotatsiya orqali kiritiladi — @ValueSource. Ammo bu haqida batafsilroq gaplashish kerak.

5.2 @ValueSource annotatsiyasi

@ValueSource annotatsiyasi primitivlar va literallar bilan ishlash uchun juda mos. Parametr qiymatlarini vergul orqali sanab o'ting va test har bir qiymat uchun bir marta chaqiriladi.


@ParameterizedTest
@ValueSource(ints = { 1, 2, 3 })
void testMethodWithAutoboxing(Integer argument) {
    //test code
}

Lekin bir minus bor - bu annotatsiya nullni qo'llab-quvvatlamaydi, shuning uchun buning uchun maxsus yechim qo'llaniladi - @NullSource. Bu quyidagicha ko'rinadi:


@ParameterizedTest
@NullSource
void testMethodNullSource(Integer argument) {
    assertTrue(argument == null);
}

5.3 @EnumSource annotatsiyasi

Shuningdek, @EnumSource nomli maxsus annotatsiya ham bor, u ma'lum bir enum qiymatlarini metodga uzatadi. Uning qo'llanilishi quyidagicha ko'rinadi:


enum Direction {
    EAST, WEST, NORTH, SOUTH
}
 
@ParameterizedTest
@EnumSource(Direction.class)
void testWithEnumSource(Direction d) {
    assertNotNull(d);
}

5.4 @MethodSource annotatsiyasi

Obyektlarni parametr sifatida qanday uzatish mumkin? Xususan, agar ular murakkab algoritm asosida yaratilsa. Buning uchun siz maxsus yordamchi metodni ko'rsatishingiz mumkin, u shu kabi qiymatlar ro'yxatini (Stream) qaytaradi.

Misol:


@ParameterizedTest
@MethodSource("argsProviderFactory")
void testWithMethodSource(String argument) {
    assertNotNull(argument);
}
 
static Stream<String> argsProviderFactory() {
    return Stream.of("bir", "ikki",  "uch");
}

Bir nechta argumentlar bilan parametrizatsiyalangan testlar

Albatta, siz hozir savol berayotgan bo'lsangiz kerak, agar metodga bir nechta parametrlar berish kerak bo'lsa, nima qilasiz? Buning uchun juda zo'r @CSVSource annotatsiyasi mavjud. U metod argumentlarining qiymatlarini oddiygina vergul orqali sanash imkonini beradi.

Misol:


@ParameterizedTest
@CsvSource({
    "alex, 30, Dasturchi, Ishlaydi",
    "brian, 35, Testchi, Ishlaydi",
	"charles, 40, Menejer, Ishlamaydi"
})
void testWithCsvSource(String name, int age, String occupation, String status) {
	//metod kodi
}
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION