Как протестировать аннотации @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 .