Я реализовал общий тест для методов hashCode
и equals
, используя экспериментальную аннотацию JUnit @Theory
. Сам класс тестового примера основан на версии dfa.
Однако, когда я пытался протестировать класс java.net.InetAddress
, я столкнулся со своеобразной проблемой, если метод, предоставляющий точки данных, содержит код, который генерирует исключение (в данном случае UnknownHostException
):
Поэтому я попробовал две альтернативы, которые привели к одному и тому же неудовлетворительному результату:
Объявите метод как вызывающий соответствующее исключение:
@DataPoints public static InetAddress[] declareException() throws UnknownHostException { return new InetAddress[] { InetAddress.getByName("not a valid internet address") }; }
Явно поймать исключение и повторно выдать как
AssertionError
:@DataPoints public static InetAddress[] rethrowAsAssertionError() { try { return new InetAddress[] { InetAddress.getByName("not a valid internet address") }; } catch(UnknownHostException ex) { throw new AssertionError(ex); } }
В обоих случаях выдается AssertionError
с бесполезным сообщением "Никогда не найдены параметры, удовлетворяющие предположениям метода. Нарушены предположения: []", что равнозначно отсутствию аннотированного метода @DataPoints
в первую очередь. .
Кто-нибудь знает, есть ли способ распространить исключение на JUnit (и, в конечном счете, на пользователя) или это ошибка в JUnit?
UnknownHostException
, и (б) я могу придумать варианты использования (например, с использованием работающей базы данных/веб-сервера...), которые могут вызвать исключения даже для правильного кода. Поэтому необходим механизм для информирования пользователя о возникновении исключения. - person ThomasH   schedule 17.11.2011@DataPoints
не так, как предполагалось. Данные должны быть значениями, которые должны давать детерминированные результаты, а не функцию тестируемого кода. - person unholysampler   schedule 17.11.2011