Возврат коллекции из ожидания - PullRequest
0 голосов
/ 04 февраля 2019

Я использую инструмент 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-запрос был опрошен несколько раз с передачей коллекции в качестве параметра?

1 Ответ

0 голосов
/ 04 февраля 2019

Ну, очевидно, в первом фрагменте вы используете

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
        }
    };
}
...