0

我正在使用 Awaitility 工具,我需要从 await 返回一个集合,以便以后能够使用它。

我有一个从 GET 调用返回的集合:

Collection collection = usersService.getAllUsers();

以下代码有效(GET调用最多执行5次以满足条件):

    waitForEvent(() -> usersService.getAllUsers()).size());

在哪里:

private void waitForEvent(Callable<Integer> collectionSize) {
    await().atMost(5, TimeUnit.SECONDS)
            .pollDelay(1, TimeUnit.SECONDS).until(collectionSize, greaterThan(5));
}

但是我需要传递一个集合(而不是它的大小)才能重用它。为什么这段代码不起作用(GET 调用只执行一次并等待 5 秒)?

waitForEvent2(usersService.getAllUsers());

在哪里

private Collection waitForEvent2(Collection collection) {
    await().atMost(5, TimeUnit.SECONDS)
            .pollDelay(1, TimeUnit.SECONDS).until(collectionSize(collection), greaterThan(5));
    return collection;
}

private Callable<Integer> collectionSize(Collection collection) {
    return new Callable<Integer>() {
        public Integer call() throws Exception {
            return collection.size(); // The condition supplier part
        }
    };
}

我需要做什么才能多次轮询 GET 请求,并将集合作为参数传递?

4

1 回答 1

0

很明显,在您使用的第一个片段中

usersService.getAllUsers().size()

并且被多次调用(调用服务->获取调用)

第二个你只使用

collection.size()

这不会获取任何东西——因为为什么会这样——但仍然会被称为相同的时间。

你能做的(我不喜欢)是

private Callable<Integer> collectionSize(Collection collection) {

    return new Callable<Integer>() {
        public Integer call() throws Exception {
            collection.clear();
            collection.addAll(usersService.getAllUsers());
            return collection.size(); // The condition supplier part
        }
    };
}
于 2019-02-04T13:58:32.340 回答