Я хочу убедиться, что они запускаются test1() перед test2() каждым моим запуском MyTest, но я не смог найти аннотацию, подобную @Test(order=xx).
Я думаю, что это довольно важная функция для JUnit, если автор JUnit не хочет функцию упорядочивания, почему?
Переведено автоматически
Ответ 1
Я думаю, что это довольно важная функция для JUnit, если автор JUnit не хочет использовать функцию упорядочивания, почему?
Я не уверен, что есть простой способ сделать это с JUnit, насколько мне известно, JUnit предполагает, что все тесты могут выполняться в произвольном порядке. Из FAQ:
(...) Порядок вызовов тестовых методов не гарантируется, поэтому testOneItemCollection() может выполняться перед testEmptyCollection(). (...)
Почему это так? Что ж, я считаю, что делать тесты зависимыми от порядка - это практика, которую авторы не хотят продвигать. Тесты должны быть независимыми, они не должны быть связаны, и нарушение этого усложнит обслуживание, нарушит возможность запускать тесты по отдельности (очевидно) и т.д.
При этом, если вы действительно хотите двигаться в этом направлении, рассмотрите возможность использования TestNG, поскольку он изначально поддерживает запуск тестовых методов в любом произвольном порядке (и такие вещи, как указание того, что методы зависят от групп методов). Седрик Буст объясняет, как это сделать в порядке выполнения тестов в testng.
Ответ 2
Если вы избавитесь от существующего экземпляра Junit и загрузите JUnit 4.11 или более поздней версии по пути сборки, следующий код выполнит тестовые методы в порядке их названий, отсортированных по возрастанию:
Переход на TestNG кажется лучшим способом, но я не вижу здесь четкого решения для JUnit. Вот наиболее читаемое решение / форматирование, которое я нашел для JUnit:
@FixMethodOrder( MethodSorters.NAME_ASCENDING )// force name ordering publicclassSampleTest { @Test voidstage1_prepareAndTest(){};
@Test voidstage2_checkSomething(){};
@Test voidstage2_checkSomethingElse(){};
@Test voidstage3_thisDependsOnStage2(){};
@Test voidcallTimeDoesntMatter(){} }
Это гарантирует, что методы stage2 будут вызываться после методов stage1 и перед методами stage3.
P.S. Я считаю, что этот подход лучше, чем JUnit 5.5 @Order annotation, потому что он обеспечивает лучшую нотацию для читателя.
Ответ 4
Если порядок важен, вы должны сделать его самостоятельно.