Непредсказуемое поведение во время и в большинстве случаев ожидания - PullRequest
0 голосов
/ 10 июля 2020

Пока я тестировал Kafka, у меня возникли проблемы с Awaitility. Целью было проверить, что Kafka topi c не содержит новых записей в течение указанного времени. Это упрощенный рисунок моего теста, но он показывает проблему. Я ожидаю, что ConditionTimeoutException в этом случае не сработает. Но это так.

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        await("wait").during(5_000, TimeUnit.MILLISECONDS).atMost(5_000, TimeUnit.MILLISECONDS)
                .pollInterval(100, TimeUnit.MILLISECONDS)
                .until(() -> list, List::isEmpty);
}

Я увеличил тайм-аут atMost до 5000 + pollInterval -> 5100, но все равно получил исключение. На моей локальной машине исключение выброса было остановлено, закрыто значение atMost тайм-аут 5170-5180. Следует что-то иметь в виду? Или может тест неверный?

1 Ответ

0 голосов
/ 26 августа 2020

В вашем случае вы хотите убедиться, что список все еще пуст через 5 секунд. Просто удалите часть "atMost". Этот код должен работать:

  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    await("wait").during(5_000, TimeUnit.MILLISECONDS)
            .pollInterval(100, TimeUnit.MILLISECONDS)
            .until(() -> list, List::isEmpty);
  }

Если вы хотите использовать «во время» с «atMost» вместе, убедитесь, что atMost time больше:

  public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    await("wait").during(5_000, TimeUnit.MILLISECONDS).atMost(5_500, TimeUnit.MILLISECONDS)
            .pollInterval(100, TimeUnit.MILLISECONDS)
            .until(() -> list, List::isEmpty);
  }
...