Келесі аннотацияларды тек SpringRunner, Spring-те JUnit 4 ережелерімен немесе Spring-те JUnit 4 көмекші сыныптары арқылы пайдаланғанда қолдануға болады:
@IfProfileValue
@IfProfileValue
аннотациясы аннотацияланған тесттің белгілі бір тест ортасы үшін белсенді екенін білдіреді. Егер конфигурацияланған ProfileValueSource
көрсетілген name
үшін сәйкес value
қайтаратын болса, онда тест белсенді болады. Олай болмаса, тест тиымдалып, іс жүзінде ескерілмейді.
@IfProfileValue
аннотациясын сынып деңгейінде, метод деңгейінде немесе екі деңгейде қолдануға болады. Сынып деңгейінде @IfProfileValue
аннотациясын қолдану, осы сыныптың немесе оның кіші сыныптарының кез келген әдістері үшін метод деңгейінде қолдануға қарағанда басымдылыққа ие. Атап айтқанда, тест сынып деңгейінде және метод деңгейінде белсенді болған жағдайда ғана белсенді болып саналады. @IfProfileValue
аннотациясының болмауы тесттің жасырын түрде белсенді екенін білдіреді. Бұл JUnit 4-тен @Ignore
аннотациясының семантикасына сәйкес келеді, айырмашылығы @Ignore
аннотациясының болуы тестті әрқашан дезактивтейді.
Келесі мысал @IfProfileValue
аннотациясы бар тестті көрсетеді:
@IfProfileValue(name="java.vendor", value="Oracle Corporation")
@Test
public void testProcessWhichRunsOnlyOnOracleJvm() {
// бұл логика тек Oracle Corporation-нан Java VM-де орындалуы керек
}
- Бұл тестті тек Java жеткізушісі "Oracle Corporation" болған жағдайда ғана орындаймыз.
@IfProfileValue(name="java.vendor", value="Oracle Corporation")
@Test
fun testProcessWhichRunsOnlyOnOracleJvm() {
// бұл логика тек Oracle Corporation-нан Java VM-де орындалуы керек
}
- Бұл тестті тек Java жеткізушісі "Oracle Corporation" болған жағдайда ғана орындаймыз.
Балама ретінде, OR
семантикасымен values
тізімін пайдаланып @IfProfileValue
аннотациясын конфигурациялауға болады, JUnit 4 ортасында TestNG-ге ұқсас тест топтарын қолдау үшін. Келесі мысалды қарастырайық:
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
@Test
public void testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// бұл логика тек модульдік және интеграциялық тест топтары үшін орындалуы керек
}
- Бұл тестті модульдік және интеграциялық тесттер үшін орындаймыз.
@IfProfileValue(name="test-groups", values=["unit-tests", "integration-tests"])
@Test
fun testProcessWhichRunsForUnitOrIntegrationTestGroups() {
// бұл логика тек модульдік және интеграциялық тест топтары үшін орындалуы керек
}
- Бұл тестті модульдік және интеграциялық тесттер үшін орындаймыз.
@ProfileValueSourceConfiguration
@ProfileValueSourceConfiguration
– бұл сынып деңгейіндегі аннотация, ол аннотацияланған @IfProfileValue
әдісі арқылы профилдік мәндерді алу үшін қандай ProfileValueSource
түрін қолдану керектігін анықтайды. Егер @ProfileValueSourceConfiguration
аннотациясы тест үшін жарияланбаса, әдепкі бойынша SystemProfileValueSource
қолданылады. Келесі мысал @ProfileValueSourceConfiguration
аннотациясын қалай пайдалану керектігін көрсетеді:
@ProfileValueSourceConfiguration(CustomProfileValueSource.class)
public class CustomProfileValueSourceTests {
// сыныптың денесі...
}
- Арнайы профиль мәнінің көзін пайдаланамыз.
@ProfileValueSourceConfiguration(CustomProfileValueSource::class)
class CustomProfileValueSourceTests {
// сыныптың денесі...
}
- Арнайы профиль мәнінің көзін пайдаланамыз.
@Timed
@Timed
аннотациясы аннотацияланған тест әдісін белгілі бір уақыт кезеңі ішінде (миллисекундтарда) аяқтау керектігін көрсетеді. Егер тестің орындалу уақыты көрсетілген уақыт кезеңінен асып кетсе, тест сәтсіз аяқталады.
Уақыт кезеңі тесттің өзі, кез келген тест қайталаулары (қараңыз @Repeat
), сондай-ақ тест орнату және шығару қамтиды. Оны қалай пайдалану керектігін келесі мысал көрсетеді:
@Timed(millis = 1000)
public void testProcessWithOneSecondTimeout() {
// бұл логика 1 секундтан артық орындалмауы керек
}
- Тестке арналған уақыт кезеңін бір секундқа тең етіп орнатамыз.
@Timed(millis = 1000)
fun testProcessWithOneSecondTimeout() {
// бұл логика 1 секундтан артық орындалмауы керек
}
- Тестке арналған уақыт кезеңін бір секундқа тең етіп орнатамыз.
Spring-тің @Timed
аннотациясы JUnit 4-тен @Test(timeout=…)
аннотациясының қолдау құралдарымен ұсынылған семантикадан өзгеше. Атап айтқанда, JUnit 4 тестің орындалу уақытын (яғни, тест әдісін бөлек Thread
орындау арқылы) қалай өңдейтініне байланысты, @Test(timeout=…)
тест ұзақ уақыт алса, оны алдын ала өтіп кетпейді. Екінші жағынан, Spring-те @Timed
аннотациясы тестті алдын ала өтіп кетпейді, тест аяқталғанша күтіп, тест сәтсіз өткенге дейін күтеді.
@Repeat
@Repeat
аннотациясы аннотацияланған тест әдісін бірнеше рет орындау керектігін көрсетеді. Тест әдісінің орындалу саны аннотацияда көрсетілген.
Кайталау аймағы тест әдісінің өзі, сондай-ақ тест орнату және шығару қамтиды. SpringMethodRule
қолданған кезде, қамту аймағы TestExecutionListener
іске асыруы арқылы тест үлгісін дайындауды қосымша қамтиды. @Repeat
аннотациясын қалай пайдалану керектігін келесі мысал көрсетеді:
@Repeat(10)
@Test
public void testProcessRepeatedly() {
// ...
}
- Бұл тестті он рет қайталаймыз.
@Repeat(10)
@Test
fun testProcessRepeatedly() {
// ...
}
- Бұл тестті он рет қайталаймыз.
GO TO FULL VERSION