Выполняет ли JUnit тестовые примеры последовательно?
В этом сообщении я задал небольшой вопрос как часть более серьезной проблемы. Поскольку я еще не получил ответов, я задал свой вопрос здесь:
Можно ли предположить, что JUnit последовательно выполняет тестовые примеры: завершение тестового примера начинается с следующего запуска. Различия между версиями JUnit (мой приоритет - JUnit4)? А если нет, есть ли простой способ заставить JUnit последовательно выполнять тесты?
Спасибо
Ответы
Ответ 1
Да, по умолчанию я считаю, что он запускает тесты последовательно.
JUnit 4.6 представила экспериментальный ParallelRunner
для запуска тестов параллельно - я не знаю его текущего состояния. Я ожидал бы, что parallelism останется функцией "поменять" по умолчанию. (Судя по другим ответам, похоже, что теперь здесь остаться, но в несколько иной форме - и все же отказаться.)
Ответ 2
Параллельное выполнение тестов поддерживается с JUnit 4.7. Но, насколько я знаю, это никогда не выполняется автоматически, вам необходимо настроить его, например. как здесь: http://java.dzone.com/articles/running-junit-tests-parallel
Но не забывайте, что:
Хорошие автоматизированные тесты должны быть независимыми, изолированными и воспроизводимыми, что делает их идеальными кандидатами для одновременного запуска.
Я не знаю, почему вы спрашиваете, но если вышеуказанные критерии не выполнены, вы можете подумать о своем тестовом дизайне.
Ответ 3
Сильное и разумное предположение: да, JUnit по умолчанию имеет однопоточность.
В противном случае не было бы известно, если тест завершился неудачно, потому что код был сломан или он потерпел неудачу из-за проблем с concurrency, если некоторые тесты выполнялись параллельно.
Ответ 4
Да,
А также подумайте о @before
и @after
там, где у вас может быть код, который восстанавливает состояние для следующего запуска теста.
Ответ 5
Да. Как уже упоминалось в комментариях, вы должны тщательно планировать настройку и отключение тестового набора (все надклассы влияют на эти действия), а также на установку и отключение тестирования.
Кроме того, по второстепенному примечанию, насколько я помню, JUnit не гарантирует порядок выполнения тестовых систем (то есть, если они не находятся в наборе, я думаю). Это важно и должно подтолкнуть вас к выполнению очень точной очистки и восстановления состояния SUT между тестами, а также избегать тестовых случаев, основанных на результатах других тестовых тестов. вы можете сказать, что это своего рода антипаттерн:).
Ответ 6
С моим опытом я могу сказать, что мы можем сериализовать тесты в классе, назвав имя метода, в котором есть Test.
например:
@Test
public ..... firstTest ()
{
}
@Test
public .... thirdTest()
{
}
@Test
public....secondTest()
{
}
Заказ firstTest, thirdTest, secondTest