Рубрики
Без рубрики

Как протестировать аннотации @Scheduled США

Узнайте, как протестировать @Scheduled аннотации весной с помощью простого интеграционного теста и библиотеки Awaitility.

Автор оригинала: baeldung.

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