Модульный тест Java с общим кодом - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в Java, поэтому заранее извиняюсь, если это глупый вопрос.

Я заметил, что пишу избыточный код, так как мои тесты тестируют похожее поведение с различными атрибутами одного и того же объекта.

@Test
public void testInvalidA() {
    obj.setA(null)
    //verify exception thrown if A is null
}

@Test
public void testInvalidB() {
    obj.setB(null)
    //verify exception thrown if B is null
}

Есть ли способ, которым я мог бы упростить это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Нет ничего плохого в том, как вы это делаете - на самом деле это предпочтительнее в большинстве случаев.Но если ваш пример - упрощение сложности, которое повторяется с аналогичной проверяемой сигнатурой, вы можете попробовать немного функционального программирования:

private void nullNotAllowed( Consumer<Object> method ) {
    try {
        method.accept( null );
        fail( "Null Not Allowed");
    }
    catch ( Exception e ) { /*pass*/ }
}

@Test public void nonNullableSetters() {
    YourClass subject = new YourClass();
    nullNotAllowed( subject::setA );
    nullNotAllowed( subject::setB );
}
0 голосов
/ 22 мая 2018

Вы можете использовать assertj.Пример кода будет выглядеть следующим образом:

@Test
public  void testObjectsAreValid() {
    assertThatExceptionOfType(ExpectedException.class)
        .isThrownBy(obj.setA(null);
    assertThatExceptionOfType(ExpectedException.class)
        .isThrownBy(obj.setB(null);
}

assertj предоставляет прямые методы для некоторых распространенных исключений.

assertThatIllegalArgumentException().isThrownBy(() -> obj.setB(null));

Проверьте здесь для получения дополнительной документации.Я согласен с Даудом, но каждый тест держите отдельно и ясно.

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