Обработка исключений Junit - PullRequest
2 голосов
/ 28 апреля 2011

Я хочу знать, должен ли этот тестовый сценарий пройти или потерпеть неудачу, потому что ожидается = IndexOutOfBoundsException.class, и на самом деле он выдает арифметическое исключениекто-нибудь может объяснить?

@Test(expected = IndexOutOfBoundsException.class)
public void testDivideNumbers()throws ArithmeticException{
    try{
        double a = 10/0;
        fail("Failed: Should get an Arithmatic Exception"); 

        }
    catch (ArithmeticException e) {

        }   

}

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Чтобы проверить, что выброшено правильное исключение, вам не нужно, чтобы метод test генерировал исключение, а просто должен сам результат теста выдать исключение.

Итак, если ожидается ArithmeticException, тогда тест должен быть:

@Test(expected = ArithmeticException.class)
public void testDivideNumbers() {
     double a = 10/0;
}
1 голос
/ 28 апреля 2011

Ожидается, что в этом тесте будет сгенерировано исключение IndexOutOfBoundsException. Поскольку этого не происходит в тесте, тест не пройден. Вы можете «исправить» тест следующим образом:

@Test(expected = IndexOutOfBoundsException.class)
public void testDivideNumbers() {
    try {
        double a = 10/0;
        Assert.fail("Failed: Should get an Arithmetic Exception"); 
    }
    catch (ArithmeticException e) {
        // Assert that this exception is thrown as expected
        Assert.assertEquals("/ by zero", e.getMessage());
    }
    throw new IndexOutOfBoundsException();
}

Вы не должны оставлять блок catch пустым. Вы должны всегда вносить в это какое-то утверждение, доказывающее, что fail () не произошел, а улов произошел и, что важно, произошел по причине, которую вы ожидали.

1 голос
/ 28 апреля 2011

Должен произойти сбой, потому что он не выдает никаких исключений;ArithmeticException перехватывается и поглощается блоком catch.

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