Есть ли менее подробный способ игнорировать конкретное вложенное исключение в модульном тесте Java? - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть несколько модульных тестов, которые выполняют код, который обращается к тестовому серверу, чтобы убедиться, что запросы правильно сформированы (т.е. мы получаем верные данные в ответ). Однако это означает, что модульные тесты и, следовательно, сборка могут быть заблокированы, если этот тестовый сервер не работает. Это не соответствует хорошей практике модульных тестов, но в качестве мысленного эксперимента допустим, что мне не разрешено удалять эти тесты или изменять их, чтобы они фактически не вызывали сервер. Я хочу изменить их так, чтобы они по-прежнему проходили, если сервер не работает (т. Е. При попытке подключиться, приводит к 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;
    }
}

Но есть ли что-нибудь еще, что я могу сделать?

1 Ответ

2 голосов
/ 06 декабря 2011

Я бы добавил строку в начало, чтобы определить, доступны ли необходимые ресурсы

@Test
public void testNumberOne() {
    if (!requiredServerAvailable()) return;
...