JUnit выполняет тестовые случаи последовательно? - PullRequest
37 голосов
/ 01 сентября 2011

В этом посте я задал небольшой вопрос как часть более серьезной проблемы.Поскольку я еще не получил ответы, я поставил свой вопрос здесь:

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

Спасибо

Ответы [ 6 ]

28 голосов
/ 01 сентября 2011

Да, по умолчанию я считаю, что он запускает тесты последовательно.

JUnit 4.6 представил экспериментальный ParallelRunner для параллельного запуска тестов - я не знаю его текущего состояния.Хотя я бы ожидал, что параллелизм останется функцией «opt-in» по умолчанию.(Судя по другим ответам, похоже, что это сейчас здесь, чтобы остаться, но в несколько ином виде - и все же согласиться.)

17 голосов
/ 01 сентября 2011

Параллельное выполнение тестов поддерживается начиная с JUnit 4.7. Но, насколько я знаю, это никогда не выполняется автоматически, вам необходимо настроить его, например, как здесь: http://java.dzone.com/articles/running-junit-tests-parallel

Но не забывайте, что:

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

Я не знаю, почему вы спрашиваете, но если вышеперечисленные критерии не выполнены, вы можете подумать о дизайне вашего теста.

5 голосов
/ 01 сентября 2011

Сильное и разумное предположение: да, JUnit является однопоточным по умолчанию.

В противном случае никто бы не узнал, провалился ли тест из-за неработоспособности кода или из-за проблем с параллелизмом, если некоторые тесты выполнялись параллельно.

3 голосов
/ 01 сентября 2011

Да,

А также подумайте о @before и @after, там может быть код, восстанавливающий состояние для запуска следующего теста.

1 голос
/ 07 сентября 2011

Да.Как уже упоминалось где-то в комментариях, вы должны тщательно спланировать установку и разбор тестового набора (все суперклассы влияют на эти действия), а также установку и разбор тестового набора.

Кроме того, на второй ноте, насколько яПомните, JUnit не гарантирует порядок выполнения тестовых случаев (то есть, если они не входят в набор, я думаю).Это важно и должно подтолкнуть вас к выполнению очень точной очистки и восстановления состояния SUT между тестами и избегать тестовых случаев, основанных на результатах других тестовых случаев.Вы можете сказать, что это своего рода антипаттерн :).

0 голосов
/ 08 марта 2013

С моим опытом я могу сказать, что мы можем сериализовать тесты в классе, назвав имя метода, содержащего Test.Например:

@Test

public ..... firstTest ()
{

}

@Test

public .... thirdTest()
{

}

@Test

public....secondTest()
{

}

Порядок firstTest, третийTest, secondTest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...