7.1 @Suite Annotatsiyasi
Va yana bir necha marta ishlatiladigan annotatsiyalar. Agar sen ularni ishlatmasang ham, testlar orasida ko'rasan. Shuning uchun kamida umumiy tushunchalarni bilib olish kerak.
Testlarni guruhlarga birlashtirish mumkin. Buning uchun maxsus @Suite annotatsiyasi mavjud. Misol:
@Suite @SuiteDisplayName("JUnit Platform Suite Demo") @SelectPackages("com.javarush.test") @IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
Bu holda @Suite annotatsiyasi boshqa annotatsiyalar bilan birgalikda ishlaydi.
SuiteDisplayName– logda testlar guruhining nomini belgilaydi;SelectPackages– test sinflari qaysi paketlarda qidirilishini belgilaydi;IncludeClassNamePatterns– test sinflari ismlarining shablonini belgilaydi.
Nima uchun bunday murakkabliklar? Xo'sh, tasavvur qiling, loyiha testlari, aytaylik, 50 soat davom etadi. Va har bir commitdan so'ng ularni bajarish juda qimmat. Bunday holda, ba'zi alohida test ssenariylarini yaratish va testlarni yanada moslashuvchan sozlash foydali bo'ladi.
7.2 @Order Annotatsiyasi
Yana bir ko'p uchraydigan annotatsiya – @TestMethodOrder. Bu annotatsiya test sinfida test metodlarini chaqirish tartibini belgilash imkonini beradi. Juda foydali, agar metodlarni chaqirish bir-biriga ta'sir qilsa, lekin ma'lum bir tartibda hammasi kerakli ishlaydi. Juda ko'p ishlatiladi.
Birinchidan, metodni alfavit tartibida chaqirish mumkin:
@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {
}
Ikkinchidan, har bir metoda uning tartib raqamini belgilovchi maxsus annotatsiyani qo'yish mumkin.
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
@Test @Order(1)
public void firstTest() {
}
@Test @Order(2)
public void secondTest() {
}
}
Yoki hatto testlarni chaqirish tartibini ko'rsatuvchi alohida sinf yaratish mumkin:
@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {
}
//metodlar nomlarini alfavit tartibida saralash, registrni e'tiborsiz qoldirib
public class CustomOrder implements MethodOrderer {
public void orderMethods(MethodOrdererContext context) {
context.getMethodDescriptors().sort(
(MethodDescriptor m1, MethodDescriptor m2)->
m1.getMethod().getName().compareToIgnoreCase(m2.getMethod().getName()));
}
}
7.3 @DisplayName Annotatsiyasi
Va nihoyat, har bir testga uning nomini belgilash mumkin. Agar testlar juda ko'p bo'lsa va maxsus ssenariylar (to'plamlar) yaratayotgan bo'lsangiz, bu qulay. Buning uchun maxsus @DisplayName annotatsiyasi mavjud.
Misol:
@DisplayName("Test uchun tushunarli nom")
public class DisplayNameCustomTest {
@Test @DisplayName("Kirish ma'lumotlarini tekshirish")
void inputData() {
}
@DisplayName("Kritik holatlarni tekshirish") @Test
void criticalCases() {
}
}
Testlar tartibini belgilashdagi kabi, bu yerda esa testlar va test metodlari nomlarini generatsiya qiluvchi maxsus metod yaratish mumkin. Misol:
@DisplayNameGeneration(DisplayNameGeneratorUnitTest.ReplaceCamelCase.class)
class DisplayNameGeneratorUnitTest {
@Test
void camelCaseName() {
}
static class ReplaceCamelCase extends DisplayNameGenerator.Standard {
@Override
public String generateDisplayNameForClass(Class
testClass) { return super.generateDisplayNameForClass(testClass).toUpperCase(); } }
}
Qarasang, hammasi oddiy :)
GO TO FULL VERSION