Почему тестовые методы CodePro junit выдают Exception (в Eclipse)? - PullRequest
0 голосов
/ 16 ноября 2011

Eclipse CodePro генерирует тесты JUnit, однако все генерируемые им тестовые методы генерируют throw Exception, даже если невозможно выдать проверенное исключение. Это ограничение CodePro или хорошая практика JUnit, которую я раньше не видел?

Например:

@Test
public void testCategory_1()
    throws Exception {
    String categoryName = "";

    Category result = new Category(categoryName);

    // add additional test code here
    assertNotNull(result);
    assertEquals(null, result.getCategoryName());
}

Где new Category(String) и result.getCategoryName() не выдают никаких проверенных исключений.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

В случае выше, вы можете удалить исключение бросков без проблем. Однако в случае, когда у вас есть проверенное исключение, управлять кодом становится намного проще, если вы просто добавляете исключение throws. Посмотрите на альтернативу:

@Test public static void testIt() {
    try {
        foobar(); // throws an IOException
    } catch (Exception e) {
        fail("caught an exception " + e.getMessage());
    }
}

вместо:

@Test public static void testIt() throws IOException {
    foobar();
}

JUnit обрабатывает исключения точно так же, как ошибки утверждений (которые фактически реализованы как AssertionError), поэтому, если в вашем коде есть непредвиденное исключение, это приведет к неудачному тесту, что, вероятно, вам и нужно. И ваш тест намного понятнее

Если у вас есть ожидаемое исключение, вы можете указать его в качестве ожидаемого исключения в аннотации @Test или с помощью TestRule ExpectedException .

Я часто использую это, когда проверяю исключения в своем коде. Гораздо проще добавить throws Exception в ваш метод тестирования, чем список всех отмеченных исключений. Вы нарушаете правила чекстайла: -)

Хорошая практика? Скорее приемлемая практика. Это значительно облегчает сопровождение тестов, а код немного понятнее.

1 голос
/ 16 ноября 2011

Это определенно не ограничение. Когда вы пишете модульный тест, вам неважно, что выдается kind исключений. За исключением ожидаемых исключений , любое исключение приведет к тому, что красная полоса сообщит вам, что что-то не так. Следовательно, достаточно иметь условие "catch all" throws Exception.

0 голосов
/ 16 ноября 2011

Вам не нужно выдавать исключение, и я бы представил, что этот инструмент мог бы выполнить статический анализ, чтобы определить, было ли выброшено проверенное исключение. Однако, когда я пишу модульные тесты вручную, я обычно добавляю предложение throw, потому что неизменно добавляю строку кода, которая выдает проверенное исключение.

...