Я пытаюсь охватить позитивный негативный сценарий при выполнении supplier
внутри CompletableFuture
. По какой-то причине проверенные значения не передаются в пределах supplier
. Мои модульные тесты написаны с использованием фреймворка спока, и, поскольку я не очень знаком с этим фреймворком, я не уверен, что я ошибаюсь во время дразнить или что-то с дразнителем поставщика, которого мне не хватает.
Проверяемый код:
CompletableFuture
.supplyAsync(() -> s3Service.upload(bucket, key, file), executor)
.handle(((putObjectResult, throwable) -> {
if (throwable != null) {
CustomRuntimeException exception = (CustomRuntimeException) throwable;
log.error(exception);
}
return putObjectResult;
}))
.thenAccept(putObjectResult -> {
if (putObjectResult != null) {
FileUtils.deleteQuietly(file);
log.debug("Deleted file {}", file.getName());
}
});
Код проверки Спока:
@SpringBean
private S3Service s3service = Mock()
def "failed to upload article into s3"() {
given: "mock the s3 service to throw CustomRuntimeException"
s3Service.upload(_, _, _) >> {
CompletableFuture<PutObjectResult> exception = new CompletableFuture<>();
exception.completeExceptionally(new CustomRuntimeException())
exception.exceptionally(new Function<Throwable, PutObjectResult>() {
@Override
PutObjectResult apply(Throwable throwable) {
throw new CompletionException(throwable)
}
})
}
Теперь, когда я отлаживаю примеры модульных тестов, экземпляр throwable
в .handle
всегда равен null
. То же самое происходит, когда я высмеиваю PutObjectResult