Тесты 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(){}