Тесты Junit Suite, поэтапно: все @Before, затем все @Test, затем все @After

Мне нужен бегун junit, который выполняет все методы @Before, затем все методы @Test, а затем все методы @After.

Так работают мои системные тесты. Методы @Before запускаются для настройки тестовых данных и сценариев. Приложение запущено. Затем методы @Test запускаются с приложением, работающим в фоновом режиме. Эти методы @Test могут изменить данные или ответить на приложение. Затем фреймворк ожидает завершения работы приложения. После этого запускаются методы @After для проверки результатов теста.

Я уже использую аннотации junit, методы утверждений и другие различные биты. Но я просто не могу понять, как использовать бегуны для запуска тестовых методов таким образом. В junit 4.8 я не мог придумать ни головы, ни хвоста интерфейса "Компьютер", ни понять, как применить к этому Правила.

2 ответа

Решение

Это не то, что делает JUnit. У JUnit есть философия дизайна, которая подчеркивает независимые модульные тесты. Таким образом, это не естественная основа для системных тестов. То, что вы хотите сделать, хорошо вписывается в TestNG (который в качестве цели проектирования пытается охватить как модульные, так и системные тесты).

В JUnit @Before и @After запускаются до и после каждого теста. Вы можете поместить эти вещи в JUnit с помощью пакета, который ссылается на все ваши тесты и отвечает за все настройки и демонтаж, поэтому методы Suite @BeforeClass и @AfterClass запускаются до и после пакета, что, если вы организуете его правильно могут быть все ваши системные тесты.

В коде много организационных проблем, когда он становится большим с подходом JUnit, поэтому я бы посоветовал вам рассмотреть и альтернативную среду, если это основная часть того, что вы хотите сделать.

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

Вроде как:

@Before
public void beforeTest(){}

@After
public void afterTest(){}

@Test
public void test(){
    test1();
    test2();
    test3();
}

public void test1(){}

public void test2(){}

public void test3(){}
Другие вопросы по тегам