Как запустить тестовые случаи JUnit из командной строки

333

Я хотел бы запустить тестовые случаи JUnit из командной строки. Как я могу это сделать?

KK.
источник
аналогичный андроида вопрос JUnit: stackoverflow.com/q/11144466/611007
n611x007
Документы Android: запуск тестов на устройстве или эмуляторе (из командной строки). ( через andreea.sandu)
n611x007
Ответ на JUnit 5 на stackoverflow.com/a/52373592/1431016
Сормурас
javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javaработал на меня. Обратите внимание на конечную точку - это важно!
парсер

Ответы:

274

Для JUnit 5.x это:

java -jar junit-platform-console-standalone-<version>.jar <Options>

Найдите краткое резюме по адресу https://stackoverflow.com/a/52373592/1431016 и полную информацию по адресу https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

Для JUnit 4.X это действительно:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Но если вы используете JUnit 3.X, обратите внимание, что имя класса отличается:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

Возможно, вам придется добавить дополнительные JAR-файлы или каталоги с вашими файлами классов в путь к классам и отделить их точками с запятой (Windows) или двоеточиями (UNIX / Linux). Это зависит от вашей среды.

Изменить: я добавил текущий каталог в качестве примера. Зависит от вашей среды и от того, как вы строите свое приложение (может быть bin / или build / или даже my_application.jar и т. Д.). Обратите внимание, что Java 6+ поддерживает глобусы в classpath, вы можете сделать:

java -cp lib/*.jar:/usr/share/java/junit.jar ...

Надеюсь, поможет. Пишите тесты! :-)

lzap
источник
@Izap Есть идея программно определить, использует ли тест JUnit4 или JUnit3?
Goaler444
2
Class.forName я думаю. Прошло много лет, как я программировал на Java в последний раз ...
lzap
а что если вы используете андроид?
n611x007
1
Документация для аргумента "-cp" (т.е. CLASSPATH) находится здесь (Java 7, Unix) и здесь (Tutorial) и здесь (Java 8, Unix) и здесь (Java 8, Windows) . По-видимому, теперь подстановочные знаки в classpath поддерживаются.
Дэвид Тонхофер
1
Downvote. Для JUnit 4.x это не правильно. В ваших инструкциях указано «Не удалось найти класс: [имя класса теста]», даже когда [имя класса теста] находится в пути к классам.
Филипп Рего
117

Maven Way

Если вы используете Maven, вы можете запустить следующую команду для запуска всех ваших тестовых случаев:

mvn clean test

Или вы можете запустить определенный тест, как показано ниже

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

Если вы хотите видеть трассировку стека (если есть) в консоли вместо файлов отчетов в папке target \ surefire-reports, установите для свойства пользователя surefire.useFile значение false. Например:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

Gradle путь

Если вы используете Gradle, вы можете запустить следующую команду для запуска всех ваших тестовых случаев:

gradle test

Или вы можете запустить определенный тест, как показано ниже

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

Если вам нужна дополнительная информация, вы можете рассмотреть такие опции, как --stacktrace, или --info, или --debug.

Например, когда вы запускаете Gradle с уровнем ведения журнала информации --info, он покажет вам результаты каждого теста во время их выполнения. Если есть какое-либо исключение, он покажет вам трассировку стека, указав, в чем проблема.

gradle test --info

Если вы хотите просмотреть общие результаты теста, вы можете открыть отчет в браузере, например (откройте его с помощью Google Chrome в Ubuntu):

google-chrome build/reports/tests/index.html

Муравей путь

После того, как вы настроили свой файл сборки Ant build.xml, вы можете запустить тестовые случаи JUnit из командной строки, как показано ниже:

ant -f build.xml <Your JUnit test target name>

Вы можете перейти по ссылке ниже, чтобы узнать больше о том, как настроить тесты JUnit в файле сборки Ant: https://ant.apache.org/manual/Tasks/junit.html

Нормальный способ

Если вы не используете Maven, Gradle или Ant, вы можете выполнить следующие действия:

Прежде всего, вам нужно скомпилировать тестовые случаи. Например (в Linux):

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

Затем запустите ваши тесты. Например:

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName
Юйцы
источник
1
Мне нравится, что этот ответ имеет примеры для нескольких технологий, слава!
Джози Томпсон
как насчет классных тестов, использующих последний подход?
Мидори
1
Заслуженный золотой значок;)
Эрик
Спасибо за версию для Gradle! Престижность!
отовы
52

Ответ, который дал @lzap, является хорошим решением. Тем не менее, я хотел бы добавить, что вы должны добавить. к пути к классам, так что ваш текущий каталог не будет пропущен, в результате чего ваши собственные классы будут пропущены. Это случилось со мной на некоторых платформах. Таким образом, обновленная версия для JUnit 4.x будет:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]
rand_acs
источник
1
это должно быть точка с запятой?
Панни
14
@panny это точка с запятой в Windows. В среде n * nix (по крайней мере, OSX и всех дистрибутивах Linux, которые я использовал) вы используете двоеточие.
rand_acs
1
@rand_acs должно ли имя тестового класса быть полностью классифицированным именем класса?
Goaler444
1
@ Goaler444 Да, я всегда использую полное имя со всеми указанными пространствами имен.
rand_acs
22

Убедитесь, что JUnit.jar находится в вашем пути к классам, а затем вызовите средство запуска командной строки из консоли.

java org.junit.runner.JUnitCore [имя класса теста]

Ссылка: Junit FAQ

Gishu
источник
4
вам также нужно настроить остальную часть пути вашего проекта.
Тило
Это просто выдает «Не удалось найти класс: [имя класса теста]», даже когда [имя класса теста] находится в пути к классам.
Филипп Рего
19

С JUnit 4.12 у меня не сработало следующее:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

По-видимому , начиная с JUnit 4.11 и далее вы должны также включать hamcrest-core.jarв свой путь к классам:

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]
Стефан ван ден Аккер
источник
Была такая же проблема с JUnit 4.12. Придумал похожее решение, но у меня не получилось, не удалось загрузить JUnitCore. Я в основном переключился на JUnit 4.8.2, поскольку он не требует включения hamcrest-core.jar в classpath.
Владимир Назаренко
Подтвердили, что это нужно сделать с помощью JUnit 4.12. +1.
Rayryeng
Это сработало для меня:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Раффи Хачадурян
11

В окнах это

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [имя класса теста без расширения .class]

например: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...и так далее, если у вас есть более одного тестового класса.

-cp обозначает путь к классу, а точка (.) представляет существующий путь к классу, а точка с запятой (;) добавляет дополнительный заданный jar к пути к классу, как в приведенном выше примере. junit-4.8.2 теперь доступен в classpath для выполнения класса JUnitCore, который здесь мы использовали для выполнения наших тестовых классов.

Вышеуказанный оператор командной строки помогает выполнять тесты junit (версия 4+) из командной строки (например, MSDos).

Примечание: JUnitCore - это фасад для выполнения тестов junit, этот фасад включен в 4+ версии junit.

жулик
источник
Пожалуйста, объясните ваш ответ очень кратко.
Мохит Джайн
Я не просил вас держать ваш ответ кратким. Я попросил добавить некоторые объяснения (хотя бы краткое объяснение). Полезно объяснить, как работает ваш ответ. Читатели могут понять это, как это, поддержать это.
Мохит Джайн
так что если бы у меня был дополнительный тестовый jar и vanilla junit jar, мне нужно было бы иметь оба из них в команде java -cp, чтобы что-нибудь действительно работало? Есть ли способ обойти все это в командной строке, чтобы мне не приходилось набирать столько текста?
Ungeheuer
5

На самом деле вы также можете сделать тест Junit работоспособным Jar и вызвать исполняемый jar как java -jar

Indraneel
источник
2
В Eclipse щелкните правой кнопкой мыши свой проект JUnit -> нажмите «Экспорт» -> выберите «Java» -> «Runnable Jar File»
Indraneel
4

Если ваш проект основан на Maven, вы можете запустить все тестовые методы из тестового класса CustomTest, который принадлежит модулю «my-module», используя следующую команду:

mvn clean test -pl :my-module -Dtest=CustomTest

Или запустите только 1 тест-метод myMethod из тест-класса CustomTest с помощью следующей команды:

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

Для этой способности вам потребуется плагин Maven Surefire v.2.7.3 + и Junit 4. Более подробная информация здесь: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html.


источник
4

Лично я бы использовал для этого надежный бегун Maven JUnit.

djangofan
источник
-1

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

ant test

Если это не работает, но все же ваш проект основан на муравьях, вы можете запустить, ant -pчтобы перечислить основные цели проекта.

cherouvim
источник
2
Q не имеет ничего общего с ant
accuya
3
Вот почему я сказал: «Если ваш проект основан на муравьях». Обратите внимание, что ОП может не знать о муравье.
Черувим
У меня была эта дилемма, файлы модульного теста не были в папке, помеченной как источник затмением. Этот проект использует ant для сборки, это был правильный способ запустить эти тесты JUnit.
Анджей Реманн