Как установить глобальное правило с JUnit - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь выполнить несколько утверждений в тесте, JUnit останавливается на первом ошибочном утверждении.

Таким образом, чтобы иметь возможность сделать все утверждения и перечислить ошибочные в конце, я использовал класс ErrorCollector и аннотацию @Rule JUnit.
Вот пример тестового класса:

public class MovieResponseTest {

    /**
     * Enable a test not to stop on an error by doing all assertions and listing the failed ones at the end.
     * the <code>@Rule</code> annotation offers a generic way to add extended features on a test method
     */
    @Rule
    public ErrorCollector collector = new ErrorCollector();


    /**
     * A test case for <code>setCelebrity</code> Method
     * @see MovieResponse#setCelebrities(List)
     */
    @Test
    public void testSetCelebrities() {
        // Some code

        this.collector.checkThat("The size of cast list should be 1.", this.movieResponse.getCast(), hasSize(1));
        this.collector.checkThat("The size of directors list should be 1.", this.movieResponse.getDirectors(), hasSize(1));
        this.collector.checkThat("The size of writers list should be 1.", this.movieResponse.getWriters(), hasSize(1));
    }
}

Теперь у меня есть другой класс с методом, который имеет несколько утверждений. Есть ли способ сделать общее @Rule, поэтому мне не нужно писать public ErrorCollector collector = new ErrorCollector(); в каждом тестовом классе.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Почему бы просто не разделить "testSetCelebrities" на несколько тестов?Что-то вроде «directorsHasProperSize», «writersHasProperSize» и т. Д. Если ваши тесты похожи на приведенный пример, похоже, что вы используете ErrorCollector для уменьшения количества ваших тестов и / или сохранения их имен похожими на методы, которые ониповторное тестирование.В этом нет необходимости, и это работает против вас, поскольку вы без необходимости увеличиваете сложность своих тестов, и ваши строки труднее читать, чем обычные утверждения.

0 голосов
/ 12 сентября 2018

Создайте абстрактный класс, поместите в него ErrorCollector и заставьте все свои тестовые классы расширять этот абстрактный класс.

public abstract class UnitTestErrorController {
    // Abstract class which has the rule.
    @Rule
    public ErrorCollector collector = new ErrorCollector();

}

public class CelebrityTest extends UnitTestErrorController {
    // Whenever a failed test takes places, ErrorCollector handle it.
}

public class NormalPeopleTest extends UnitTestErrorController {
    // Whenever a failed test takes places, ErrorCollector handle it.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...