0

在我测试 Kafka 时,我最终遇到了一些关于 Awaitility 的问题。目标是测试 Kafka 主题在指定时间内不包含新记录。这是我测试的简化版,但它显示了问题。我希望 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。我应该记住一些事情吗?还是测试不正确?

4

1 回答 1

0

在您的情况下,您要确保列表在 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);
  }

如果您想将“during”与“atMost”一起使用,请确保 atMost 时间更大:

  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);
  }
于 2020-08-26T10:37:44.467 回答