Выполняет ли JUnit тестовые примеры последовательно?
Автор вопроса: H-HОтветов: 7
В этом сообщении я задал небольшой вопрос как часть более крупного проблема. Поскольку я еще не получил ответов, я задаю свой вопрос здесь:
Разумно ли предположить, что JUnit выполняет тестовые примеры последовательно: тестовый пример заканчивается раньше, чем начинается следующий. Отличается ли он между версиями JUnit (мой приоритет - JUnit4)? А если нет, есть ли простой способ заставить JUnit выполнять тесты последовательно?
Спасибо
В качестве примечания, вот еще немного о параллельном выполнении тестов с использованием JUnit 4.7: stackoverflow.com/questions/423627/ mort 01.09.2011
Если вы используете JUnit в своей сборке Maven, и ваша сборка настроена на многопоточность с использованием параметра -T (например, -T 4C), тогда тесты будут выполняться параллельно, где это возможно. Tom Chamberlain 18.08.2015
Да, я считаю, что по умолчанию тесты запускаются последовательно.
JUnit 4.6 представил экспериментальный ParallelRunner для параллельного запуска тестов - я не знаю его текущего статуса. Тем не менее, я ожидаю, что параллелизм по умолчанию останется функцией "согласия". (Судя по другим ответам, похоже, что теперь он здесь, чтобы остаться, но в немного другой форме - и все еще есть.)
Хорошие автоматизированные тесты должны быть независимыми, изолированными и воспроизводимыми, что делает их идеальными кандидатами для одновременного выполнения.
Я не знаю, почему вы спрашиваете, но если вышеперечисленные критерии не соблюдаются, вы можете подумать о своем дизайне теста.
Ответ 3 · рейтинг 5 · Farmor
Да,
А также подумайте о @before и @after, где у вас может быть код, который восстанавливает состояние для следующего теста.
Ответ 4 · рейтинг 5 · Andreas Dolk
Сильное и разумное предположение: да, JUnit по умолчанию является однопоточным.
В противном случае нельзя было бы узнать, провалился ли тест из-за поломки кода или из-за проблем с параллелизмом, если некоторые тесты выполнялись параллельно.
Ответ 5 · рейтинг 1 · Adam
да. Как упоминалось где-то в комментариях, вам следует тщательно спланировать настройку и разборку тестового набора (все суперклассы влияют на эти действия), а также настройку и разбор тестового набора.
Кроме того, второстепенное замечание, насколько я помню, JUnit не гарантирует порядок выполнения тестовых наборов (то есть, если они не входят в набор, я полагаю). Это важно и должно подтолкнуть вас к очень точной очистке и восстановлению состояния SUT между тестами, а также избегать тестовых примеров, полагающихся на результаты других тестов. можно сказать, что это своего рода антипаттерн :).
Ответ 6 · Apoorv Gupta
По умолчанию JUnit запускает тесты в детерминированном, но непредсказуемом порядке (MethodSorters.DEFAULT).
В Junit 5:, если вы хотите запускать тесты последовательно
используйте @TestMethodOrder для управления порядком выполнения тестов.
А затем используйте аннотацию @Order, чтобы заставить тесты запускаться в определенном порядке.
Пример:
@TestMethodOrder(OrderAnnotation.class)
public class OrderAnnotationUnitTest {
private static StringBuilder output = new StringBuilder("");
@Test
@Order(1)
public void firstTest() {
output.append("a");
}
@Test
@Order(2)
public void secondTest() {
output.append("b");
}
@Test
@Order(3)
public void thirdTest() {
output.append("c");
}
@AfterAll
public static void assertOutput() {
assertEquals(output.toString(), "abc");
}
}
Ответ 7 · рейтинг -8 · sri
По своему опыту могу сказать, что мы можем сериализовать тесты в классе, назвав имя метода, в котором есть Test. бывший:
@Test
public ..... firstTest ()
{
}
@Test
public .... thirdTest()
{
}
@Test
public....secondTest()
{
}