я реализовал общий тест для hashCode
и equals
методов с использованием экспериментальной аннотации JUnit @Theory
. Сам класс тестового примера основан на версии dfa .
Однако, когда я пытался протестировать класс java.net.InetAddress
, я столкнулся со специфической проблемой, если метод, который предоставляет точки данных, содержит код, который генерирует исключение (в данном случае an UnknownHostException
):
Итак, я попробовал две альтернативы, обе привели к одному и тому же неудовлетворительному результату:
Объявить метод как генерирующий соответствующее исключение:
@DataPoints
public static InetAddress [] declareException () генерирует исключение UnknownHostException {
return new InetAddress [] {
InetAddress.getByName ("недействительный интернет-адрес")
};
}
Явно перехватите исключение и повторно вызовите его как AssertionError
:
@DataPoints
общедоступный статический InetAddress [] rethrowAsAssertionError () {{{1} } попробуйте {
вернуть новый InetAddress [] {
InetAddress.getByName ("недействительный интернет-адрес")
};
} catch (UnknownHostException ex) {
throw new AssertionError (ex);
} {{1 }}}
В обоих случаях возникает ошибка AssertionError
с бесполезным сообщением «Никогда не найдены параметры, удовлетворяющие предположениям метода. Нарушенные предположения: []» , что в первую очередь означает отсутствие аннотированного метода @DataPoints
.
Кто-нибудь знает, есть ли способ распространить исключение на JUnit (и, в конечном итоге, на пользователя), или это ошибка в JUnit?