JavaRush /Kurslar /All lectures for UZ purposes /JUnit4 Test Annotations

JUnit4 Test Annotations

All lectures for UZ purposes
Daraja, Dars
Mavjud

Quyidagi annotatsiyalar faqat SpringRunner bilan birgalikda, JUnit 4 uchun qoidalar (rules) bilan yoki JUnit 4 yordamchi klasslari bilan ishlatishda qo'llab-quvvatlanadi:

@IfProfileValue

@IfProfileValue annotatsiyasi, annotatsiyalangan test ma'lum bir test muhitida faollashtirilganligini bildiradi. Agar sozlangan ProfileValueSource kiritilgan name uchun mos value qaytarsa, test faollashadi. Aks holda, test man qilingan va amalda e'tiborsiz qolinadi.

@IfProfileValue annotatsiyani sinf darajasida, metod darajasida yoki har ikkala darajada qo'llash mumkin. Sinf darajasida @IfProfileValue annotatsiyasidan foydalanish ushbu sinf yoki uning subclasslaridagi har qanday metodlar uchun metod darajasidagi foydalanishdan ustunligini beradi. Xususan, agar sinf va metod darajasida ham faollashtirilgan bo'lsa, test faollashgan deb hisoblanadi. @IfProfileValue annotatsiyasining yo'qligi testni implicit tarzda faollashtirilganligini bildiradi. Bu JUnit 4-dagi @Ignore annotatsiyasi semantikasi bilan mutanosib, faqat @Ignore annotatsiyasi mavjud bo'lsa har doim testni o'chirib qo'yadi.

Quyidagi misolda @IfProfileValue bilan annotatsiyalangan test ko'rsatilgan:

Java
@IfProfileValue(name="java.vendor", value="Oracle Corporation") 
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
    // Faqat Oracle Corporation'dan Java VM uchun bajarilishi kerak bo'lgan ba'zi mantiq
}
  1. Ushbu testi faqat Java yetkazib beruvchi "Oracle Corporation" bo'lsa bajariladi.
Kotlin
@IfProfileValue(name="java.vendor", value="Oracle Corporation") 
@Test
fun testProcessWhichRunsOnlyOnOracleJvm() {
    // Faqat Oracle Corporation'dan Java VM uchun bajarilishi kerak bo'lgan ba'zi mantiq
}
  1. Ushbu testi faqat Java yetkazib beruvchi "Oracle Corporation" bo'lsa bajariladi.

Muqobil ravishda, @IfProfileValue annotatsiyasini TestNG-like test guruhlarini JUnit 4 muhitida qo'llab-quvvatlash uchun values (OR semantikasiga ega) ro'yxatini ishlatish orqali sozlash mumkin. Quyidagi misolga e'tibor qiling:

Java
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) 
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
    // faqat unit va integration testlar guruhlari uchun bajarilishi kerak bo'lgan ba'zi mantiq
}
  1. Bu testi unit va integration testlar uchun bajaramiz.
Kotlin
@IfProfileValue(name="test-groups", values=["unit-tests", "integration-tests"]) 
@Test
fun testProcessWhichRunsForUnitOrIntegrationTestGroups() {
    // faqat unit va integration testlar guruhlari uchun bajarilishi kerak bo'lgan ba'zi mantiq
}
  1. Bu testi unit va integration testlar uchun bajaramiz.

@ProfileValueSourceConfiguration

@ProfileValueSourceConfiguration – bu sinf darajasidagi annotatsiya bo'lib, @IfProfileValue bilan sozlangan profil qiymatlarini olishda qaysi turdagi ProfileValueSource ishlatishni aniqlaydi. Agar test uchun @ProfileValueSourceConfiguration annotatsiyasi e'lon qilinmagan bo'lsa, SystemProfileValueSource standart bo'lib ishlatiladi. Quyidagi misolda @ProfileValueSourceConfiguration annotatsiyasidan qanday foydalanish ko'rsatilgan:

Java
@ProfileValueSourceConfiguration(CustomProfileValueSource.class) 
public class CustomProfileValueSourceTests {
    // klassning tanasi...
}
  1. Maxsus profil qiymat manbasidan foydalanamiz.
Kotlin
@ProfileValueSourceConfiguration(CustomProfileValueSource::class) 
class CustomProfileValueSourceTests {
    // klassning tanasi...
}
  1. Maxsus profil qiymat manbasidan foydalanamiz.

@Timed

@Timed annotatsiyasi, annotatsiyalangan test metodini berilgan vaqt (millisekundlarda) ichida bajarilishi kerakligini bildiradi. Agar testni bajarish vaqti belgilangandan oshsa, test muvaffaqiyatsiz tugaydi.

Vaqt oralig'i test metodining o'zi, testning har qanday takrorlanishi (qarang: @Repeat), shuningdek, test muhitini o'rnatish va bosqichma-bosqich ko'rsatishni o'z ichiga oladi. Quyidagi misolda undan qanday foydalanish ko'rsatilgan:

Java
@Timed(millis = 1000) 
public void testProcessWithOneSecondTimeout() {
    // Bir sekunddan ko'p vaqt talab qilmasligi kerak bo'lgan ba'zi mantiq
}
  1. Testning vaqt oralig'ini bir sekund qilib belgilaymiz.
Kotlin
@Timed(millis = 1000) 
fun testProcessWithOneSecondTimeout() {
    // Bir sekunddan ko'proq vaqt talab qilmasligi kerak bo'lgan ba'zi mantiq
}
  1. Testning vaqt oralig'ini bir sekund qilib belgilaymiz.

Spring'dagi @Timed annotatsiyasi JUnit 4'dagi @Test(timeout=…) annotatsiyasining semantikasidan farq qiladi. Ayniqsa, JUnit 4 testni bajarish kutish (timeout) qiymatlarini qanday ishlashiga (ya'ni test metodini alohida Threadda bajarish orqali) bog'liq holda, @Test(timeout=…) tezkor tarzda testni muvaffaqiyatsiz qoldiradi, agar test juda ko'p vaqt oladi. Boshqa tomondan, Spring'dagi @Timed annotatsiyasi testni tezkor holda muvaffaqiyatsiz qilib ko'rsatmaydi, test tugashini kutadi, keyin esa muvaffaqiyatsiz o'tganligini bildiradi.

@Repeat

@Repeat annotatsiyasi, annotatsiyalangan test metodining bir necha marta bajarilishi kerakligini bildiradi. Test metodini bajarish soni annotatsiyada belgilanadi.

Takror bajarish ko'lami, test metodining o'zini bajarishni, shuningdek, test muhitini o'rnatish va bosqichma-bosqich ko'rsatishni o'z ichiga oladi. SpringMethodRule bilan ishlatilganda, ko'lam qo'shimcha ravishda TestExecutionListener'sidan test namunasini tayyorlashni o'z ichiga oladi. Quyidagi misolda @Repeat annotatsiyasidan qanday foydalanish ko'rsatilgan:

Java
@Repeat(10) 
@Test
public void testProcessRepeatedly() {
    // ...
}
  1. Bu testni o'n marta takrorlaymiz.
Kotlin
@Repeat(10) 
@Test
fun testProcessRepeatedly() {
    // ...
}
  1. Bu testni o'n marta takrorlaymiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION