7.1 Аннотатсияи @Suite
Ва боз якчанд аннотатсияи маъмул. Ҳатто агар ту онҳоро истифода набарида бошӣ ҳам, дар тестҳо бо онҳо ҳатман дучор мешавӣ. Аз ин рӯ, лозим аст, ки каме фаҳмиш дошта бошӣ, ки дар он ҷо чи навишта шудааст.
Тестҳоро метавон дар гурӯҳҳо якҷоя кард. Барои ин як аннотатсияи махсус мавҷуд аст @Suite
. Намуна:
@Suite @SuiteDisplayName("JUnit Platform Suite Demo") @SelectPackages("com.javarush.test") @IncludeClassNamePatterns(".*Tests")
class SuiteDemo {
}
Дар ин ҳолат аннотатсияи @Suite бо дигар аннотатсияҳо якҷоя кор мекунад.
SuiteDisplayName
– номи гурӯҳи тестҳоро дар лог муайян мекунад;SelectPackages
– рӯйхати пакетҳое, ки дар онҳо синфҳои тестиро ҷустуҷӯ кардан лозим аст, муайян мекунад;IncludeClassNamePatterns
– намунаи номҳои синфҳои тестиро муайян мекунад.
Чаро чунин душворӣ? Хайр, тасаввур кун, ки ҳамаи тестҳои проект, бигӯем, 50 соат иҷро мешаванд. Ва онҳоро баъд аз ҳар як commit иҷро кардан хеле гарон аст. Дар чунин ҳолат фоиданок аст, ки баъзе сенарияҳои ҷудогонаи тестиро эҷод карда, тестиро хеле чандиртар наcб кунӣ.
7.2 Аннотатсияи @Order
Яке аз аннотатсияҳои маъмул бо номи @TestMethodOrder
мавзӯъ мешавад. Он имкон медиҳад, ки тартиби бозхондани методҳои тестиро дар синфи тестӣ муайян кунӣ. Вақте, ки ту медонӣ, ки бозхондани методҳо ба якдигар таъсир мерасонад, аммо дар як тартиби муайян ҳама чиз бояд мисли лозим кор кунад, ин хеле фоиданок аст. Ин хеле маъмул аст.
Аввалан, мумкин аст, ки бозхондани методҳоро дар тартиби алифбоӣ муайян кунӣ:
@TestMethodOrder(MethodOrderer.MethodName.class)
public class AlphanumericOrderUnitTest {
}
Дар дуюм, ба ҳар як метод мумкин аст дар тартиби муйяншуда аннотатсияеро бо рақами тартибиаш ҷойгир кунӣ.
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
@Test @Order(1)
public void firstTest() {
}
@Test @Order(2)
public void secondTest() {
}
}
Ё ҳатто як синфи ҷудогонаро эҷод карда, ки тартиби бозхондани тестҳоро нишон медиҳад:
@TestMethodOrder(CustomOrder.class)
public class CustomOrderUnitTest {
}
//номҳои методҳоро бо тартиби алифбоӣ месорт мекунем, аммо регистрро надидаем
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
Ва ниҳоят, ба ҳар як тест мумкин аст номи худро дода шавад. Вақте, ки тестҳо хеле зиёданд ва ту сенарияҳои махсус (зермаҷмӯъҳо) тестҳоро эҷод мекунӣ, ин мумкин аст хеле кумаки бошад. Барои ин як аннотатсияи махсус мавҷуд аст @DisplayName
.
Намуна:
@DisplayName("Номи фаҳмо барои тест")
public class DisplayNameCustomTest {
@Test @DisplayName("Проверка входных данных")
void inputData() {
}
@DisplayName("Проверка критических ситуаций") @Test
void criticalCases() {
}
}
Мисли дар ҳолати муайян кардани тартиби тестҳо, дар ин ҷо ҳам мумкин аст як методи махсусро эҷод кунӣ, ки номҳои тест ва методҳои тестиро эҷод мекунад. Намуна:
@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(); } }
}
Мебинӣ, ки ҳама чӣ қадар осон аст :)
GO TO FULL VERSION