Ответ 1
Такая зависимость от методов тестирования плохая конструкция, и ее следует избегать. Если в одном тестовом методе есть код инициализации, который должен быть выполнен для следующего, его следует учитывать в методе setUp.
У меня есть тестовый класс в java, и в нем есть несколько методов, аннотированных @Test, так или иначе, я хочу, чтобы Junit выполнил метод A до метода B, когда я запускаю все тесты. Возможно ли это или необходимо?
Такая зависимость от методов тестирования плохая конструкция, и ее следует избегать. Если в одном тестовом методе есть код инициализации, который должен быть выполнен для следующего, его следует учитывать в методе setUp.
Проблема с этим - отчетность. Если вы ХОТИТЕ/НЕОБХОДИМО видеть, что каждый из методов тестирования терпит неудачу или проходит, вы будете ВЕРНО.
Я понимаю, что вы не хотите, чтобы один тест основывался на предыдущих тестах. Но независимо от этого могут возникнуть ситуации, в которых вам это нужно (или вы увеличите сложность теста по порядку величина).
Должен ли поток тестов в коде быть разработчиком тестов или разработчиком структуры?
Покажите тестовый код JUnit 10 разработчикам java, и я готов поспорить, большинство из них предположит, что тесты (независимо от чего-либо внешнего) будут выполняться в том порядке, в котором они появляются в тестовом классе.
Разве это не должно быть поведение JUnit по умолчанию? (Дайте мне возможность сказать, что заказ вместо JUnit вычисляет его самостоятельно).
Обновление: 2014-11-18 Более новая версия JUnit поддерживает сортировщики методов
//Это сохраняет тесты в алфавитном порядке @FixMethodOrder (MethodSorters.NAME_ASCENDING)
Я бы подумал, что вы можете создать свой собственный сортировщик методов, если хотите "действительно", сделать свой собственный определенный порядок.
Тесты должны иметь независимый порядок, но иногда у нас нет того, чего мы хотим. Если у вас большой проект с тысячами тестов, и они зависят от их порядка выполнения, у вас будет много проблем, когда, например, вы попытаетесь перенести на java 7, потому что он будет перетасовывать все тесты.
Подробнее об этой проблеме вы можете прочитать здесь:
Если это только два метода, вам нужно будет обернуть его в один unit test, который действительно не зависит от заказа.
@Test
public void testInOrder() throws Exception {
testA();
testB();
}
используйте для настройки до и после тестов
@Before
public void setUp() throws MWException {
}
@After
public void tearDown() {
}