Как уведомить JUnit об исключениях, сгенерированных в аннотированных методах @DataPoints?

я реализовал общий тест для hashCode и equals методов с использованием экспериментальной аннотации JUnit @Theory . Сам класс тестового примера основан на версии dfa .

Однако, когда я пытался протестировать класс java.net.InetAddress , я столкнулся со специфической проблемой, если метод, который предоставляет точки данных, содержит код, который генерирует исключение (в данном случае an UnknownHostException ):

Итак, я попробовал две альтернативы, обе привели к одному и тому же неудовлетворительному результату:

  1. Объявить метод как генерирующий соответствующее исключение:

     @DataPoints 
    public static InetAddress [] declareException () генерирует исключение UnknownHostException {
    return new InetAddress [] {
    InetAddress.getByName ("недействительный интернет-адрес") 
    }; 
     } 
     
  2. Явно перехватите исключение и повторно вызовите его как AssertionError :

     @DataPoints 
    общедоступный статический InetAddress [] rethrowAsAssertionError () {{{1} } попробуйте {
    вернуть новый InetAddress [] {
    InetAddress.getByName ("недействительный интернет-адрес") 
    }; 
    } catch (UnknownHostException ex) {
    throw new AssertionError (ex); 
    } {{1 }}} 
     

В обоих случаях возникает ошибка AssertionError с бесполезным сообщением «Никогда не найдены параметры, удовлетворяющие предположениям метода. Нарушенные предположения: []» , что в первую очередь означает отсутствие аннотированного метода @DataPoints .

Кто-нибудь знает, есть ли способ распространить исключение на JUnit (и, в конечном итоге, на пользователя), или это ошибка в JUnit?

5
задан Community 23 May 2017 в 11:58
поделиться