Можно ли указать, какой метод Before выполняется в JUnit, и если да, то как?

#junit #junit4

#junit #junit4

Вопрос:

У меня есть набор тестов, который тестирует две разные вещи в одном классе. У меня есть метод before, который инициализирует некоторые поля для использования методов тестирования. Однако у меня есть группа методов тестирования, которая использует первый набор полей, и другая группа, которая использует второй, но не первый. Я знаю, что можно разделить действие before на разные методы before, но можно ли также указать, какой из них выполняется перед каждым тестом?

Конкретный пример:

 @Before
public void before1() {...}

@Before
public void before2() {...}

@Test
public void test1() {
    //Only before1 runs
}

@Test
public void test2() {
    //Only before2 runs
}
  

Это простое представление, но у меня гораздо больше тестов, которые используют любой из этих befores .

Комментарии:

1. Нет никакой гарантии в отношении порядка @Before выполнения, так же как нет гарантии в отношении @Test порядка выполнения.

Ответ №1:

Все, что вы указали в своем вопросе, указывает на разделение ваших тестов на 2 отдельных класса. Я предполагаю, что две группы, которые у вас есть, тестируют различные функции вашего кода и могут даже иметь некоторую общность в именах тестов. Перенесите все тесты, которые требуются before1 , в тестовый класс, а все тесты, которые требуются before2 , — в другой тестовый класс. Вы можете назвать эти новые тестовые классы в соответствии с группировкой поведения, которое вы тестируете.

Например, если половина ваших тестов предназначена для сценариев успеха, а половина тестирует сценарии сбоев, поместите их в классы с именами что-то вроде FooSucceedsTest и сбои в FooFailsTest .

Ответ №2:

Нет никакой гарантии в отношении порядка @Before выполнения, так же как нет гарантии в отношении @Test порядка выполнения.

Решение состоит в том, чтобы выполнить любую настройку, от которой зависит тест, в @Test самом и использовать @Before для общей настройки перед выполнением теста.