JavaRush /Курстар /All lectures for KK purposes /JUnit4 тесттік аннотациялары

JUnit4 тесттік аннотациялары

All lectures for KK purposes
Деңгей , Сабақ
Қол жетімді

Келесі аннотацияларды тек SpringRunner, Spring-те JUnit 4 ережелерімен немесе Spring-те JUnit 4 көмекші сыныптары арқылы пайдаланғанда қолдануға болады:

@IfProfileValue

@IfProfileValue аннотациясы аннотацияланған тесттің белгілі бір тест ортасы үшін белсенді екенін білдіреді. Егер конфигурацияланған ProfileValueSource көрсетілген name үшін сәйкес value қайтаратын болса, онда тест белсенді болады. Олай болмаса, тест тиымдалып, іс жүзінде ескерілмейді.

@IfProfileValue аннотациясын сынып деңгейінде, метод деңгейінде немесе екі деңгейде қолдануға болады. Сынып деңгейінде @IfProfileValue аннотациясын қолдану, осы сыныптың немесе оның кіші сыныптарының кез келген әдістері үшін метод деңгейінде қолдануға қарағанда басымдылыққа ие. Атап айтқанда, тест сынып деңгейінде және метод деңгейінде белсенді болған жағдайда ғана белсенді болып саналады. @IfProfileValue аннотациясының болмауы тесттің жасырын түрде белсенді екенін білдіреді. Бұл JUnit 4-тен @Ignore аннотациясының семантикасына сәйкес келеді, айырмашылығы @Ignore аннотациясының болуы тестті әрқашан дезактивтейді.

Келесі мысал @IfProfileValue аннотациясы бар тестті көрсетеді:

Java
@IfProfileValue(name="java.vendor", value="Oracle Corporation") 
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
    // бұл логика тек Oracle Corporation-нан Java VM-де орындалуы керек
}
  1. Бұл тестті тек Java жеткізушісі "Oracle Corporation" болған жағдайда ғана орындаймыз.
Kotlin
@IfProfileValue(name="java.vendor", value="Oracle Corporation") 
@Test
fun testProcessWhichRunsOnlyOnOracleJvm() {
    // бұл логика тек Oracle Corporation-нан Java VM-де орындалуы керек
}
  1. Бұл тестті тек Java жеткізушісі "Oracle Corporation" болған жағдайда ғана орындаймыз.

Балама ретінде, OR семантикасымен values тізімін пайдаланып @IfProfileValue аннотациясын конфигурациялауға болады, JUnit 4 ортасында TestNG-ге ұқсас тест топтарын қолдау үшін. Келесі мысалды қарастырайық:

Java
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"}) 
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
    // бұл логика тек модульдік және интеграциялық тест топтары үшін орындалуы керек
}
  1. Бұл тестті модульдік және интеграциялық тесттер үшін орындаймыз.
Kotlin
@IfProfileValue(name="test-groups", values=["unit-tests", "integration-tests"]) 
@Test
fun testProcessWhichRunsForUnitOrIntegrationTestGroups() {
    // бұл логика тек модульдік және интеграциялық тест топтары үшін орындалуы керек
}
  1. Бұл тестті модульдік және интеграциялық тесттер үшін орындаймыз.

@ProfileValueSourceConfiguration

@ProfileValueSourceConfiguration – бұл сынып деңгейіндегі аннотация, ол аннотацияланған @IfProfileValue әдісі арқылы профилдік мәндерді алу үшін қандай ProfileValueSource түрін қолдану керектігін анықтайды. Егер @ProfileValueSourceConfiguration аннотациясы тест үшін жарияланбаса, әдепкі бойынша SystemProfileValueSource қолданылады. Келесі мысал @ProfileValueSourceConfiguration аннотациясын қалай пайдалану керектігін көрсетеді:

Java
@ProfileValueSourceConfiguration(CustomProfileValueSource.class) 
public class CustomProfileValueSourceTests {
    // сыныптың денесі...
}
  1. Арнайы профиль мәнінің көзін пайдаланамыз.
Kotlin
@ProfileValueSourceConfiguration(CustomProfileValueSource::class) 
class CustomProfileValueSourceTests {
    // сыныптың денесі...
}
  1. Арнайы профиль мәнінің көзін пайдаланамыз.

@Timed

@Timed аннотациясы аннотацияланған тест әдісін белгілі бір уақыт кезеңі ішінде (миллисекундтарда) аяқтау керектігін көрсетеді. Егер тестің орындалу уақыты көрсетілген уақыт кезеңінен асып кетсе, тест сәтсіз аяқталады.

Уақыт кезеңі тесттің өзі, кез келген тест қайталаулары (қараңыз @Repeat), сондай-ақ тест орнату және шығару қамтиды. Оны қалай пайдалану керектігін келесі мысал көрсетеді:

Java
@Timed(millis = 1000) 
public void testProcessWithOneSecondTimeout() {
    // бұл логика 1 секундтан артық орындалмауы керек
}
  1. Тестке арналған уақыт кезеңін бір секундқа тең етіп орнатамыз.
Kotlin
@Timed(millis = 1000) 
fun testProcessWithOneSecondTimeout() {
    // бұл логика 1 секундтан артық орындалмауы керек
}
  1. Тестке арналған уақыт кезеңін бір секундқа тең етіп орнатамыз.

Spring-тің @Timed аннотациясы JUnit 4-тен @Test(timeout=…) аннотациясының қолдау құралдарымен ұсынылған семантикадан өзгеше. Атап айтқанда, JUnit 4 тестің орындалу уақытын (яғни, тест әдісін бөлек Thread орындау арқылы) қалай өңдейтініне байланысты, @Test(timeout=…) тест ұзақ уақыт алса, оны алдын ала өтіп кетпейді. Екінші жағынан, Spring-те @Timed аннотациясы тестті алдын ала өтіп кетпейді, тест аяқталғанша күтіп, тест сәтсіз өткенге дейін күтеді.

@Repeat

@Repeat аннотациясы аннотацияланған тест әдісін бірнеше рет орындау керектігін көрсетеді. Тест әдісінің орындалу саны аннотацияда көрсетілген.

Кайталау аймағы тест әдісінің өзі, сондай-ақ тест орнату және шығару қамтиды. SpringMethodRule қолданған кезде, қамту аймағы TestExecutionListener іске асыруы арқылы тест үлгісін дайындауды қосымша қамтиды. @Repeat аннотациясын қалай пайдалану керектігін келесі мысал көрсетеді:

Java
@Repeat(10) 
@Test
public void testProcessRepeatedly() {
    // ...
}
  1. Бұл тестті он рет қайталаймыз.
Kotlin
@Repeat(10) 
@Test
fun testProcessRepeatedly() {
    // ...
}
  1. Бұл тестті он рет қайталаймыз.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION