#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
для общей настройки перед выполнением теста.