Если слишком сложно разбить это на отдельные методы тестирования, вот что работало для меня в прошлом.
Создайте метод expectsException()
, который ожидает Callback
.
interface Callback {
void call() throws Exception;
}
void expectsException(Callback callback) {
try {
callback.call();
fail("ExpectedException was not thrown!");
} catch (Exception e) {
if (!(e instanceof ExpectedException)) {
fail("Expecting ExpectedException, got " + e.getClass());
}
assertEquals("Expected exception message", e.getMessage());
}
}
Затем оберните код внутри ваших try {...} catch
блоков в Callback
:
@Test
public void testSomething() {
expectsException(new Callback() {
public void call() throws Exception {
// assert 1
}
});
expectsException(new Callback() {
public void call() throws Exception {
// assert 2
}
});
}
Обратите внимание, однако, что в зависимости от того, что вы делаете в блоке catch
, это можетили может не оказаться менее многословным, чем прямолинейный try {...} catch
.
(Когда Java получит правильное замыкание, этот подход будет иметь гораздо больше смысла.)