Як запустити тестові випадки JUnit з командного рядка


333

Я хотів би запустити тестові випадки JUnit з командного рядка. Як я можу це зробити?


аналогічний андроїда питання JUnit: stackoverflow.com/q/11144466/611007
n611x007

Документи Android: виконання тестів на пристрої або емуляторі (з командного рядка). ( через andreea.sandu)
n611x007

Відповідь на JUnit 5 в stackoverflow.com/a/52373592/1431016
Sormuras

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). Це залежить від вашого оточення.

Редагувати: Я додав поточний каталог як приклад. Залежить від вашого середовища та того, як ви будуєте свою програму (може бути бін / або збірка / або навіть my_application.jar тощо). Примітка. Java 6+ підтримує глобуси на classpath, ви можете:

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

Сподіваюся, це допомагає. Пишіть тести! :-)


@Izap Будь-яка ідея програмно визначити, чи використовується тест JUnit4 або JUnit3?
Goaler444

2
Class.forName я здогадуюсь. Минуло роки, коли я востаннє програмував на Java ...
lzap

а що робити, якщо ви використовуєте android?
n611x007

1
Документація для аргументу "-cp" (тобто CLASSPATH) знаходиться тут (Java 7, Unix) і тут (Підручник) і тут (Java 8, Unix) і тут (Java 8, Windows) . Мабуть, підкреслювальні символи на класному шляху тепер підтримуються.
Девід Тонхофер

1
Downvote. Для JUnit 4.x це неправильно. Ваші вказівки дають "Не вдалося знайти клас: [ім'я тестового класу]" Навіть коли [ім'я тестового класу] знаходиться на шляху.
Філіп Рего

117

Спосібний шлях

Якщо ви використовуєте Maven, ви можете запустити наступну команду для запуску всіх тестових випадків:

mvn clean test

Або ви можете запустити певний тест, як показано нижче

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

Якщо ви хочете побачити трасування стека (якщо він є) на консолі замість файлів звітів у папці target \ surefire-messages, встановіть властивість користувача surefire.useFile на false. Наприклад:

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

Градле шлях

Якщо ви використовуєте 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 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
Мені подобається, що у цій відповіді є приклади для декількох технологій, кудо!
Джозі Томпсон

як щодо тестів на ритмі з використанням останнього підходу?
midori

1
Добре заслужений золотий знак;)
Ерік Дюмініл

Дякуємо за версію для gradle! Кудо!
ady

52

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

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

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 [назва класу тесту]

Довідка: FAQ про Джуніт


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

У windows це

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 до classpath, як у наведеному вище прикладі junit-4.8.2 тепер доступний у classpath для виконання класу JUnitCore, який тут ми використовували для виконання наших тестових класів.

Наведений вище командний рядок допомагає виконувати тести junit (версія 4+) з командного рядка (тобто MSDos).

Примітка: JUnitCore - це фасад для виконання тестів на юніт, цей фасад входить у 4+ версії junit.


Будь ласка, поясніть свою відповідь дуже коротко.
Мохіт Джайн

Я не просив вас тримати свою відповідь короткою. Я попросив додати пояснення (принаймні коротке пояснення). Це хороша практика пояснити, як працює ваша відповідь. Читачі можуть зрозуміти це, як це, підкріпити.
Мохіт Джайн

Так що, якщо б у мене була банка для додаткового тестування І банку з ванільним джунітом, я повинен мати обох тих, хто в команді java -cp, щоб щось насправді працювало? Чи є спосіб, коли потрібно все це вкласти в командний рядок, щоб мені не довелося набирати стільки матеріалів?
Ungeheuer

5

Насправді ви також можете зробити тест на Джуніт непрацюючим баночкою і назвати баночку, що працює, як java -jar


2
У програмі Eclipse клацніть правою кнопкою миші проект JUnit -> Клацніть на Експорт -> Виберіть Java->
Запуск

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 Plugin v.2.7.3 + та Junit 4. Детальніше тут: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html




-1

Якщо у вас проект на основі мурашок, ви повинні мати можливість зробити щось подібне з консолі:

ant test

Якщо це не працює, але все ж ваш проект базується на мурашниках, ви можете запустити ant -pсписок основних цілей проекту.


2
Q не має нічого спільного з ant
accuya

3
Тому я сказав "якщо ваш проект базується на мурашках". Зауважте також, що ОП може не знати про мураш.
cherouvim

У мене була така дилема, тестові файли одиниць не були в папці, позначеній як джерело затемненням. Цей проект використовує мурашник для побудови, це був правильний спосіб запустити ці тести JUnit.
Анджей Реманн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.