Я пытаюсь проверить, что все мои исключения верны. Поскольку значения обернуты в CompletableFutures
, исключение составляет ExecutionException
, что является исключением, которое я обычно проверяю. Быстрый пример:ExpectedException причина причины?
void foo() throws A {
try {
bar();
} catch B b {
throw new A(b);
}
}
Так foo()
переводит исключение брошенной bar()
, и все, что делается внутри CompletableFutures
и AsyncHandlers
(я не буду копировать весь код, это просто для справки)
В моем блоке Тесты Делаем bar()
бросить исключение, и хотят, чтобы проверить, что он правильно переводится при вызове foo()
:
Throwable b = B("bleh");
when(mock.bar()).thenThrow(b);
ExpectedException thrown = ExpectedException.none();
thrown.expect(ExecutionException.class);
thrown.expectCause(Matchers.allOf(
instanceOf(A.class),
having(on(A.class).getMessage(),
CoreMatchers.is("some message here")),
));
до сих пор так хорошо, б у Я также хочу, чтобы убедиться, что причина исключения A
является исключением B
и having(on(A.class).getCause(), CoreMatchers.is(b))
причин CodeGenerationException --> StackOverflowError
TL; DR: Как получить причину причины ожидаемого исключения?
Может быть, этот вопрос является то, что вы хотите (я не уверен): https://stackoverflow.com/questions/ 871216/junit-possible-to-expect-a-wrapped-exception/20759785 # 20759785 –
@RC. Почти, но я должен идти на один уровень глубже и получить следующую причину :) – Amir
Вы должны уметь адаптировать: https://stackoverflow.com/a/6528640/180100 –