Как протестировать аннотации @Scheduled США
1. Введение
Одна из доступных аннотаций в Весенние рамочных это @Scheduled . Мы можем использовать эту аннотацию для выполнение задач в плановом .
В этом учебнике мы изумим, как протестировать @Scheduled аннотация.
2. Зависимости
Во-первых, давайте начнем создавать Весенняя загрузка Maven основе приложения от Весенний инициализатор :
org.springframework.boot spring-boot-starter-parent 2.1.2.RELEASE
Мы также должны использовать пару Весна Boot закуски:
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test
И, давайте добавим зависимость для JUnit 5 к нашему пом.xml :
org.junit.jupiter junit-jupiter-api
Мы можем найти последнюю версию Весенней загрузки на Мавен Центральный .
Кроме того, использовать Ожидаемая в наших тестах, мы должны добавить его зависимость:
org.awaitility awaitility 3.1.6 test
3. Простой @Scheduled образец
Начнем с создания простого Счетчик класс:
@Component
public class Counter {
private AtomicInteger count = new AtomicInteger(0);
@Scheduled(fixedDelay = 5)
public void scheduled() {
this.count.incrementAndGet();
}
public int getInvocationCount() {
return this.count.get();
}
}Мы будем использовать запланированные метод увеличения нашей считать . Обратите внимание, что мы также добавили @Scheduled аннотация для его выполнения в фиксированный период в пять миллисекунд.
Кроме того, давайте создадим ЗапланированоКонфиг класс для включения запланированных задач с использованием @EnableScheduling аннотация:
@Configuration
@EnableScheduling
@ComponentScan("com.baeldung.scheduled")
public class ScheduledConfig {
}4. Использование интеграционного тестирования
Одной из альтернатив для тестирования нашего класса является использование интеграционное тестирование . Для этого нам нужно использовать @SpringJUnitConfig аннотация для запуска контекста приложения и наших бобов в среде тестирования:
@SpringJUnitConfig(ScheduledConfig.class)
public class ScheduledIntegrationTest {
@Autowired
Counter counter;
@Test
public void givenSleepBy100ms_whenGetInvocationCount_thenIsGreaterThanZero()
throws InterruptedException {
Thread.sleep(100L);
assertThat(counter.getInvocationCount()).isGreaterThan(0);
}
}В этом случае мы начинаем нашу Счетчик фасоли и ждать 100 миллисекунд, чтобы проверить количество призывов.
5. Использование ожидаемости
Другим подходом к тестированию запланированных задач является использование Awaitility. Мы можем использовать DSL Awaitility, чтобы сделать наш тест более декларативным:
@SpringJUnitConfig(ScheduledConfig.class)
public class ScheduledAwaitilityIntegrationTest {
@SpyBean
private Counter counter;
@Test
public void whenWaitOneSecond_thenScheduledIsCalledAtLeastTenTimes() {
await()
.atMost(Duration.ONE_SECOND)
.untilAsserted(() -> verify(counter, atLeast(10)).scheduled());
}
}В этом случае, мы вводим наши бобы с @SpyBean аннотация, чтобы проверить количество раз, что запланированные метод называется в течение одной секунды.
6. Заключение
В этом учебнике мы показали несколько подходов к тестированию запланированных задач с помощью интеграционного тестирования и библиотеки Awaitility.
Мы должны принять во внимание, что, хотя интеграционные тесты хороши, как правило, лучше сосредоточиться на единице тестирования логики внутри запланированного метода .
Как обычно, все образцы кода, показанные в этом учебнике, доступны на GitHub .