Почему аннотации JUnit 5 Suite @SelectClasses и @IncludeClassNamePatterns не могут найти тесты, которые не заканчиваются на Tests или Test?

При обновлении до JUnit 5 (версия 5.5.2) я сделал странное открытие с функциональностью пакета: мои наборы могут находить и запускать тесты, которые заканчиваются словом "Test", но не могут найти тесты, которые не заканчиваются на " Тест »(в моем случае они заканчиваются на« База »).

В JUnit 4 мы использовали аннотацию @Suite.SuiteClasses() для поиска этих тестов, но аннотация JUnit 5 @SelectClasses, похоже, полностью пропускает эти тестовые классы. Даже при использовании @IncludeClassNamePatterns({"^Com.*Base.*?$"}) не удается обнаружить тесты, что мне показалось странным (тесты, которые я хочу запустить, начинаются с «Com»). После этого я попробовал аннотацию @Tag(), которая тоже не сработала.

Я предположил, что это произошло потому, что Maven Surefire (версия 2.22.2) обнаруживает только тестовые классы, которые начинаются с Test или заканчиваются Test, Tests или TestCase. Итак, я попытался включить свой базовый тестовый пример:

<includes>
        <include>**/*Base.java</include>
        <include>**/Test*.java</include>
        <include>**/*Test.java</include>
        <include>**/*Tests.java</include>
        <include>**/*TestCase.java</include>
</includes>

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

Мой код будет выглядеть примерно так:

@RunWith(JUnitPlatform.class)
@SelectClasses({
    Com_TestOne_Base.class,
    Com_TestTwo_Base.class,
    Com_TestThree_Base.class,
    Com_TestFour_Base.class,
    Com_TestFive_Base.class,
    Com_TestSix_Base.class,
})
public class Com_Base_Suite {
}

Результатом выполнения этого пакета является успешный запуск тестов, но на самом деле тесты не выполняются. Все эти тесты были обновлены до JUnit 5 и успешно выполняются самостоятельно.


person DJ_I    schedule 21.11.2019    source источник


Ответы (1)


Проблема, с которой вы сталкиваетесь, приводит к смешиванию JUnit 4 и 5. Maven Surefire может запускать тесты JUnit 5 (также известный как платформа JUnit) из коробки - при условии, что у вас есть правильные зависимости в вашем pom. См., Например, https://github.com/junit-team/junit5-samples/tree/master/junit5-jupiter-starter-maven для минимального pom.xml.

JUnitPlatform, SelectClasses и др. позволяют запускать тесты платформы JUnit через JUnit 4. Вероятно, вы захотите сделать это только в том случае, если ваш инструмент сборки или IDE сами не поддерживают платформу JUnit. JUnit 5 в настоящее время не имеет какой-либо явной поддержки наборов тестов, подобных аннотации @Suite в JUnit 4.

Я рекомендую вам полностью избавиться от Com_Base_Suite и придерживаться соглашения об именах, которое можно настроить в разделе Maven <includes>.

person johanneslink    schedule 22.11.2019
comment
Я считаю, что я вынужден использовать JUnitPlaform, как указано в руководстве пользователя: @RunWith(JUnitPlatform.class) @SuiteDisplayName("JUnit Platform Suite Demo") @SelectPackages("example") public class JUnitPlatformSuiteDemo { } Кроме того, в нем говорится: По умолчанию он будет включать только тестовые классы, имена которых либо начинаются с Test, либо заканчиваются Test или Tests. Итак, я бы предположил, что @IncludeClassNamePatterns () добавит (или заменит) текущие шаблоны, которые он ищет. Почему это не так? - person DJ_I; 22.11.2019
comment
По принуждению? Если вы действительно хотите пойти по этому пути, вы, вероятно, столкнетесь с проблемами с зависимостями, поскольку вам понадобятся все зависимости Junit5, но также убедитесь, что Surefire не запускает тесты JUnit 5 сам по себе. Для чего нужно много идиосинкразических настроек? Большая часть, если не все, что вы можете делать с помощью RunWith (JUnitPlatform), также можно выполнить стандартными средствами Maven. - person johanneslink; 23.11.2019
comment
Eclipse имеет поддержку JUnit 5 довольно давно, поэтому вы можете установить более новую версию и избавиться от этих проблем. Если вы не можете обновить, вам, вероятно, придется включить суффикс _Suite в вашу конфигурацию Maven, иначе набор не будет выбран - я полагаю. - person johanneslink; 25.11.2019