Как предварительно определить последовательность выполнения тестовых примеров junit?

У меня есть тестовый класс в java, и в нем есть несколько методов, аннотированных @Test, так или иначе, я хочу, чтобы Junit выполнил метод A до метода B, когда я запускаю все тесты. Возможно ли это или необходимо?

Ответы

Ответ 1

Такая зависимость от методов тестирования плохая конструкция, и ее следует избегать. Если в одном тестовом методе есть код инициализации, который должен быть выполнен для следующего, его следует учитывать в методе setUp.

Ответ 2

Проблема с этим - отчетность. Если вы ХОТИТЕ/НЕОБХОДИМО видеть, что каждый из методов тестирования терпит неудачу или проходит, вы будете ВЕРНО.

Я понимаю, что вы не хотите, чтобы один тест основывался на предыдущих тестах. Но независимо от этого могут возникнуть ситуации, в которых вам это нужно (или вы увеличите сложность теста по порядку величина).

Должен ли поток тестов в коде быть разработчиком тестов или разработчиком структуры?

Покажите тестовый код JUnit 10 разработчикам java, и я готов поспорить, большинство из них предположит, что тесты (независимо от чего-либо внешнего) будут выполняться в том порядке, в котором они появляются в тестовом классе.

Разве это не должно быть поведение JUnit по умолчанию? (Дайте мне возможность сказать, что заказ вместо JUnit вычисляет его самостоятельно).

Обновление: 2014-11-18 Более новая версия JUnit поддерживает сортировщики методов

//Это сохраняет тесты в алфавитном порядке @FixMethodOrder (MethodSorters.NAME_ASCENDING)

Я бы подумал, что вы можете создать свой собственный сортировщик методов, если хотите "действительно", сделать свой собственный определенный порядок.

Ответ 3

Тесты должны иметь независимый порядок, но иногда у нас нет того, чего мы хотим. Если у вас большой проект с тысячами тестов, и они зависят от их порядка выполнения, у вас будет много проблем, когда, например, вы попытаетесь перенести на java 7, потому что он будет перетасовывать все тесты.

Подробнее об этой проблеме вы можете прочитать здесь:

junit test ordering и java 7

Ответ 4

Если это только два метода, вам нужно будет обернуть его в один unit test, который действительно не зависит от заказа.

@Test
public void testInOrder() throws Exception {
    testA(); 
    testB(); 
}

Ответ 5

используйте для настройки до и после тестов

@Before
public void setUp() throws MWException {

}

@After
public void tearDown() {

}