Модульное тестирование метода с помощью CompletableFuture.allOf()JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Модульное тестирование метода с помощью CompletableFuture.allOf()

Сообщение Anonymous »

Я пытаюсь протестировать метод, использующий CompletableFuture.allOf(). Это мой метод:

Код: Выделить всё

    static CompletableFuture anySuccess(List futures) {
CompletableFuture delegateFuture = new CompletableFuture();

CompletableFuture.allOf(futures.stream().map(s -> s.thenApply(t -> {
if (t == null) {
// Here we treat null as a failed lookup.
// The inner dummy exception serves as a signal for the caller to return null.
throw new RuntimeException();
}
return t;
}).thenAccept(delegateFuture::complete)).toArray(CompletableFuture[]::new))
.exceptionally(ex -> {
delegateFuture.completeExceptionally(ex);
return null;
});
return delegateFuture;
}
Входной набор CompletableFutures может завершиться/предположительно завершится в разное время. Вот как выглядит мой модульный тест

Код: Выделить всё

    @Test
void testAnySuccess() {
final byte[] payload1 = "payload1".getBytes();
final byte[] payload2 = "payload2".getBytes();

List futures = Arrays.asList(
CompletableFuture.supplyAsync(
() -> null
),
CompletableFuture.supplyAsync(
() -> {
LockSupport.parkNanos(Duration.ofSeconds(5).toNanos());
System.out.println("Wait for 5 seconds");
return payload2;
}),
CompletableFuture.supplyAsync(
() -> {
LockSupport.parkNanos(Duration.ofMillis(100).toNanos());
System.out.println("Wait for 100ms");
return payload1;
})
);
long start = System.nanoTime();
CompletableFuture res = anySuccess(futures);
byte[] actualRes = res.join();
Assert.assertEquals(actualRes, payload1);
Насколько я понимаю, метод allOf() не блокируется, но возвращает другой CompletableFuture, который завершается только тогда, когда все фьючерсы в нем завершены.< /p>
Вот мой ожидаемый результат: вернуть первое ненулевое значение или, если все они равны нулю, вернуть исключение.
Я в замешательстве. о том, нужно ли мне использовать метод allOf -vs-anyOf в данном конкретном случае. Или мне нужно изменить регистр так, чтобы я не использовал метод .Exceptionally(...) и попытался изменить его с помощью thenAccept(...)

Подробнее здесь: https://stackoverflow.com/questions/791 ... ture-allof
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»