Итак, я пишу модульные тесты, в которых я тестирую возможности для внесения в черный и черный список пользователей (эта функция в моем коде работает сама по себе).
Вот пример команды, которая работает какОжидается:
assertThrows(ExecutionException.class, () -> onlineStore.lookup("533"));
Если я внесу пользователя в черный список «533», а затем выполню указанную выше команду, он будет работать нормально, потому что поднято ExecutionException
(потому что вы пытаетесь найти пользователя, занесенного в черный список).Точно так же, если бы я НЕ находился в черном списке пользователя "533", но все еще выполнял вышеупомянутую команду, тест не прошел бы, что также ожидается по той же причине (то есть теперь не выдается исключение, поскольку вы НЕ извлекаете пользователя из черного списка).
Однако, если у меня есть List
идентификаторов пользователей с именем userIds
(частью которого теперь является "533"), и я заносу их в черный список (функционал, который, как я знаю, работает нормально), а затем запускаю командуниже:
userIds.stream().map(id -> assertDoesNotThrow(() -> onlineStore.lookup(id)));
... тест пройден, даже через него должно пройти FAILED.Зачем ?Поскольку все пользователи теперь занесены в черный список, поэтому при извлечении этих пользователей должен быть выдан ExecutionExceptions
.
Если я сейчас заменим приведенную выше команду streams на любую из следующих, они будут работать как положено:
assertThrows(ExecutionException.class, () -> onlineStore.lookup("533"));
assertDoesNotThrow(() -> onlineStore.lookup("533"));
Таким образом, все это заставляет меня поверить, что по каким-то причинам при прохождении через потоки Java брошенные ExecutionExceptions
не попадают в ловушку.
Есть какое-либо объяснение этому поведению?