У меня есть несколько модульных тестов, которые выполняют код, который обращается к тестовому серверу, чтобы убедиться, что запросы правильно сформированы (т.е. мы получаем верные данные в ответ). Однако это означает, что модульные тесты и, следовательно, сборка могут быть заблокированы, если этот тестовый сервер не работает. Это не соответствует хорошей практике модульных тестов, но в качестве мысленного эксперимента допустим, что мне не разрешено удалять эти тесты или изменять их, чтобы они фактически не вызывали сервер. Я хочу изменить их так, чтобы они по-прежнему проходили, если сервер не работает (т. Е. При попытке подключиться, приводит к ConnectException), но не работают, если возникает любое другое исключение. Что делает его более сложным, тестируемый код не генерирует исключение ConnecException напрямую, а создает исключение оболочки, которое его содержит. Итак, изначально это означает, что каждый тест будет выглядеть примерно так:
@Test
public void testNumberOne() {
// body of test...
}
К этому:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
}
Можно ли как-нибудь избежать вставки этой попытки / перехвата в каждый модульный тест?
Я знаю, что могу реорганизовать хотя бы часть из этого, ала:
@Test
public void testNumberOne() {
try {
// body of test...
} catch (ThirdPartyWrapperException e) {
handleException(e);
}
}
private void handleException(ThirdPartyWrapperException e)
throws ThirdPartyWrapperException {
if (!(e.getRootCause() instanceof ConnectException) {
throw e;
}
}
Но есть ли что-нибудь еще, что я могу сделать?