Тестирование исключений

164
26 апреля 2019, 06:00

У меня имеется метод:

    protected double getAbsoluteValue(int omega) throws Exception {
    if(omega<-2) throw new Exception("The number is less than 10^-2, current value: "+ pow(10,omega));
    if(omega>3) throw new Exception("The number is more than 10^3, current value: "+ pow(10,omega));
    int a = getTimeConstantInDenominator()* getTimeConstantInDenominator();
    double b = pow(pow(10,omega),2);
    double den =(b * a)+1;
    return numerator/ sqrt(den);
}

Я его тестирую с помощью JUnit4.

    @org.junit.Test
    public void getAbsoluteValue() throws Exception {
    int omega = 1;
    FilterTest filterTest = new LowPathFilter(1,1,1);
    long actual = (long)filterTest.getAbsoluteValue(omega);
    long expected = (long)(1/Math.sqrt(1*Math.pow(10,2)-1));
    Assert.assertEquals(expected, actual);
}

Вот только не могу понять как мне протестировать два исключительных случая.

Answer 1

Есть хорошая библиотека для ассертов - AssertJ.

С Assertj тестирование исключений выглядит таким образом :

FilterTest filterTest = new LowPathFilter(1,1,1);
assertThatThrownBy(() -> filterTest.getAbsoluteValue(-3))
            .isInstanceOf(RuntimeException.class)
            .hasMessageContaining("The number is less than 10^-2, current value: ");
Answer 2

Тест без проверки сообщения:

    @org.junit.Test(expected = Exception.class)
    public void shouldThrowException() throws Exception {
        final int invalidValue = -6;
        YourClass yourClass = new YourClass();
        yourClass.getAbsoluteValue(invalidValue);
        fail("Тест должен не пройти, если мы не получили ошибку до этой строки");
    }

Лучше выкидывать IllegalArgumentException вместо Exception

Еще один варинт

    @org.junit.Test
    public void shouldThrowException() {
        final int invalidValue = -6;
        YourClass yourClass = new YourClass();
        try {
            yourClass.getAbsoluteValue(invalidValue);
            fail("Тест должен не пройти, если мы раньше не получили ошибку");
        } catch (Exception e) {
            Assert.assertEquals(expectedMessage, e.getMessage());            
        }
    }

Если есть вожможность лучше искользуйте jUnit5

READ ALSO
Есть такой сервис, куда можно выложить код, и где любой желающий сможет его сразу запустить?

Есть такой сервис, куда можно выложить код, и где любой желающий сможет его сразу запустить?

Хочу протестить свой кодЛично я ошибок не нахожу(почти), другие люди находят

158
Как добавить иконки пунктам меню в SystemTray?

Как добавить иконки пунктам меню в SystemTray?

Подскажите пожалуйста, как добавить иконки к пунктам меню, которые расположены в системном трее (в данном случае к пункту "Профиль")В официальном...

137
Вложенный тернарный оператор

Вложенный тернарный оператор

Прохожу тест-задачу:

403
Scala vs Java, какой язык быстрее [закрыт]

Scala vs Java, какой язык быстрее [закрыт]

Какой язык быстрее java или scala, допустим есть две программы написанные по тому же алгоритму только одна написана на Java а другая на scala, какая...

147