Объявление «генерирует исключение» вместо длинного списка исключений в тестовом примере - PullRequest
2 голосов
/ 06 мая 2020

Рассмотрим следующий тестовый пример:

@Test
public void testFooBar ()
        throws FooBadParameterException,
               FooInvalidStateException,
               BarUnmatchedException,
               BarDuplicatedException
{
    Foo foo = fooService.generateFoo();
    Bar bar = barService.generateBar();
    assertThat(foo.getId()).isEqualTo(bar.getId());
}

, где FooBadParameterException, FooInvalidStateException, BarUnmatchedException, BarDuplicatedException - отмеченные исключения, которые могут быть сгенерированы fooService.generateFoo() и barService.generateBar() .

Мой вопрос: могу ли я упростить приведенный выше тестовый пример до:

@Test
public void testFooBar ()
        throws Exception
{
    Foo foo = fooService.generateFoo();
    Bar bar = barService.generateBar();
    assertThat(foo.getId()).isEqualTo(bar.getId());
}

Хотя я не придумал никаких причин не делать этого, я хочу спросить, есть ли любые скрытые недостатки, чтобы сделать это.

Примечание: в В Java используется исключение throws вместо того, чтобы бросать несколько спецификаций c исключения Хорошая практика? , принятый ответ охватывает только чехол для Spring MVC. Мой вопрос касается тестовых случаев.

1 Ответ

3 голосов
/ 06 мая 2020

Нет веских причин против изменения этого на throws Exception. Во-первых, вы говорите о методе тестирования, что означает, что никто не должен вызывать этот метод, кроме механизма модульных тестов.

Поэтому никому не нужно будет обрабатывать эти исключения в каких-либо значимых способ (что потребовало бы знания отдельных типов исключений для целевой обработки). В той же строке никто не выиграет от документации, которую API предоставит неявно.

Обычно я замечаю сходство между этим и несколькими типами исключений в списке, «который будет выдан» методами main. Нет никакого другого смысла, кроме как заглушить компилятор (при условии, что те проверенные исключения, которые нуждаются в обработке, были должным образом обработаны в методе). поэтому я обычно превращаю их в throws Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...