Существует ли JUnit TestRunner для запуска групп тестов?
-
03-07-2019 - |
Вопрос
В настоящее время я использую JUnit 4, и мне необходимо разделить мои тесты на группы, которые можно запускать выборочно в любой комбинации.Я знаю, что в TestNG есть функция аннотирования тестов для назначения их группам, но я не могу перейти на TestNG прямо сейчас.Кажется, это можно было бы легко выполнить в JUnit с помощью некоторых пользовательских аннотаций и пользовательского JUnit TestRunner.Я проверил обе документации JUnit и поискал в Интернете, но ничего подобного найти не смог.Кто-нибудь знает о таком Тестраннере?
Обновить:Спасибо за ваши ответы относительно наборов тестов.Мне следовало бы затронуть эти вопросы в моем первоначальном вопросе.Поехали:Я не хочу использовать наборы тестов, потому что они потребовали бы, чтобы я вручную создавал их и управлял ими, что означает прикосновение ко ВСЕМ моим тестам и упорядочивание их по наборам вручную (слишком много работы и кошмар обслуживания).Все, что мне нужно сделать, это запустить все модульные тесты, за исключением нескольких, которые на самом деле являются интеграционными тестами.Поэтому я хочу прокомментировать их и запустить все остальные.В других случаях я хочу просто запустить интеграционные тесты.У меня также есть необходимость разбить модульный тест на несколько групп, что невозможно с наборами.Надеюсь, это поможет прояснить ситуацию.
Обновление 2:Если в JUnit нет этого OOB, я ищу библиотеку с открытым исходным кодом, которая добавляет это в JUnit (аннотации + пользовательский тестовый модуль JUnit).
Решение
Посмотри на Spring's SpringJUnit4ClassRunner - запускатель.Я использовал его для дополнительного запуска тестов на основе системного свойства, используя IfProfileValue IfProfileValue аннотация.
Это:
@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
public void testWhichRunsForUnitOrIntegrationTestGroups() {
// ...
}
Будет выполняться, если системному свойству 'test-groups' присвоено значение 'unit-tests' или 'integration-tests'.
Обновить: JUnitExt - Младший текст имеет @Category
и @Prerequisite
аннотации и выглядит так, будто он должен делать то, что вам нужно.Однако я сам никогда им не пользовался, поэтому не могу за это поручиться.
Другие советы
На данный момент у JUnit нет такого бегуна.Устранение основной проблемы - необходимости получения разумных гарантий от набора тестов за ограниченный промежуток времени - является нашим высшим приоритетом разработки следующего выпуска.В то же время, внедрение фильтра, который работает с помощью аннотаций, кажется, что это не будет большим проектом, хотя я предвзят.
Во-первых, вы решаете две проблемы - модульные тесты (часто в том же пакете, что и тестируемый модуль) и интеграционные тесты.Обычно я храню свои интеграционные тесты в отдельном пакете, что-то вроде com.example.project.tests.В eclipse мои проекты выглядят следующим образом:
project/
src/
com.example.project/
tsrc/
com.example.project/
com.example.project.tests/
Щелчок правой кнопкой мыши по пакету и выбор "Выполнить" запускают тесты в пакете;выполнение того же самого в исходной папке запускает все тесты.
Вы можете достичь аналогичного эффекта, хотя и выразили незаинтересованность в нем, используя Бегун из люкса.Однако это нарушает DRY - вы должны поддерживать копии имен тестов в актуальном состоянии в классах suite.Однако вы можете легко поместить один и тот же тест в несколько наборов.
@RunWith(Suite.class)
@Suite.SuiteClasses( {
TestAlpha.class,
TestBeta.class })
public class GreekLetterUnitTests {
}
Конечно, мне действительно следовало бы автоматизировать эти вещи.Хорошим методом для этого является использование задача муравья.
<target name="tests.unit">
<junit>
<batchtest>
<fileset dir="tsrc">
<include name="**/Test*.java"/>
<exclude name="**/tests/*.java"/>
</fileset>
</batchtest>
</junit>
</target>
<target name="tests.integration">
<junit>
<batchtest>
<fileset dir="tsrc">
<include name="**/tests/Test*.java"/>
</fileset>
</batchtest>
</junit>
</target>
Нет, к сожалению, подобной концепции для TestNG groups не существует.Это было запланировано для JUnit4, но по какой-то неясной причине оно было исключено из планирования.
Вы можете создавать наборы, хотя это помещает всю конфигурацию в набор, а не в аннотации.
JUnit 3 позволяет вам создавать наборы тестов, которые можно запускать как любой другой тест.Разве в JUnit 4 нет аналогичной концепции?
Если вы используете ANT или maven, вы можете контролировать, какие тесты выполняются, фильтруя тесты по имени.Немного неловко, но у вас это может сработать.
У TestNG есть мой голос.Он основан на аннотациях, может запускаться в виде групп, отдельных тестов и т.д., может быть связан с Maven и может запускать все тесты JUnit как часть своих тестовых запусков.
Я настоятельно рекомендую использовать его вместо JUnit.
мой совет - просто откажитесь от JUnit и используйте TestNG.Как только вы привыкнете к TestNG, Junit будет выглядеть как каменный век.