Я знаю, что вы можете запустить все тесты в определенном классе, используя:
mvn test -Dtest=classname
Но я хочу запустить отдельный метод, и -Dtest = classname.methodname, похоже, не работает.
Я знаю, что вы можете запустить все тесты в определенном классе, используя:
mvn test -Dtest=classname
Но я хочу запустить отдельный метод, и -Dtest = classname.methodname, похоже, не работает.
Ответы:
Чтобы запустить один метод тестирования в Maven, вам нужно предоставить команду как:
mvn test -Dtest=TestCircle#xyz test
где TestCircle
имя тестового класса иxyz
теста и метод теста.
Дикие символы также работают; как в имени метода, так и в имени класса.
Если вы тестируете в многомодульном проекте, укажите модуль, с которым будет проходить тест -pl <module-name>
.
Для интеграционных тестов используйте it.test=...
параметр вместо test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
-pl <module-name>
.
-DfailIfNoTests=false
чтобы пропустить проекты без теста. No Tests Were Executed
происходит, когда вы пытаетесь запустить тест из корневого проекта, и есть модули без тестов вообще.
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Обратите внимание, что "-DTest" начинается с ВЕРХНЕГО СЛУЧАЯ 'T'.
Есть проблема с верным 2.12. Вот что случилось со мной, изменив maven-surefire-plugin с 2.12 на 2.11:
mvn test -Dtest=DesignRulesTest
Результат:
[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-surefire-plugin: 2.12 : test (default-test) для проекта pmd: Тесты не выполнялись!
mvn test -Dtest=DesignRulesTest
Результат: [INFO] --- maven-surefire-plugin: 2.11 : test (default-test) @ pmd --- ... Запуск net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Выполнено тестов: 5 , Сбои: 0, Ошибки: 0, Пропущено: 4, Время истекло: 4.009 сек.
@Category(IntegrationTest.class)
, используйте -Dit.test=ClassName
, в противном случае вы получите No tests were executed!
даже с последними версиями плагина.
Что я делаю с моим TestNG, (извините, JUnit не поддерживает это) контрольные примеры - я могу назначить группу для теста, который я хочу выполнить
@Test(groups="broken")
А затем просто запустите 'mvn -Dgroups = broken'.
Запуск набора методов в одном классе тестирования В версии 2.7.3 вы можете запустить только n тестов в одном классе тестирования.
ПРИМЕЧАНИЕ: это поддерживается для junit 4.x и TestNG.
Вы должны использовать следующий синтаксис
mvn -Dtest=TestCircle#mytest test
Вы также можете использовать шаблоны
mvn -Dtest=TestCircle#test* test
Начиная с версии 2.12.1, вы можете выбрать несколько методов (только JUnit4X, патчи приветствуются)
mvn -Dtest=TestCircle#testOne+testTwo test
Проверьте эту ссылку на отдельные тесты
Вы можете запустить определенный тестовый класс (ы) и метод (ы), используя следующий синтаксис:
полный пакет: mvn test -Dtest = "com.oracle.tests. **"
весь метод в классе: mvn test -Dtest = CLASS_NAME1
один метод из одного класса: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1
множественный метод из нескольких классов: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
Эта команда работает !!
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Обратите внимание, что "-DTest" начинается с ВЕРХНЕГО СЛУЧАЯ 'T'.
Тест параметр упоминается tobrien позволяет указать метод с использованием # перед именем метода. Это должно работать для JUnit и TestNG. Я никогда не пробовал это, просто прочитайте это на странице Плагина Surefire :
Укажите этот параметр для запуска отдельных тестов по имени файла, переопределяя параметры include / exclude. Каждый указанный здесь шаблон будет использоваться для создания включаемого шаблона, отформатированного как ** / $ {test} .java, поэтому вы можете просто набрать «-Dtest = MyTest», чтобы запустить один тест с именем «foo / MyTest.java». Этот параметр переопределяет параметры include / exclude и параметр TestNG suiteXmlFiles. с 2.7.3 Вы можете выполнить ограниченное количество методов в тесте, добавив #myMethod или # my * ethod. Тип Si "-Dtest = MyTest # myMethod" поддерживается для junit 4.x и testNg
Новые версии JUnit содержат бегунок категорий: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
Но процедура выпуска JUnit не основана на maven, поэтому пользователи maven должны вручную поместить ее в свои репозитории.
С верным плагином версии 2.22.1 (возможно, ранее) вы можете запускать одиночный тест с использованием свойства testnames при использовании testng.xml
Учитывая следующее testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="all-tests">
<classes>
<class name="server.Atest"/>
<class name="server.Btest"/>
<class name="server.Ctest"/>
</classes>
</test>
<test name="run-A-test">
<classes>
<class name="server.Atest"/>
</classes>
</test>
<test name="run-B-test">
<classes>
<class name="server.Btest"/>
</classes>
</test>
<test name="run-C-test">
<classes>
<class name="server.Ctest"/>
</classes>
</test>
</suite>
с помощью pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
[...]
<properties>
<selectedTests>all-tests</selectedTests>
</properties>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<file>src/test/resources/testng.xml</file>
</suiteXmlFiles>
<properties>
<property>
<name>testnames</name>
<value>${selectedTests}</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
[...]
</project>
Из командной строки
mvn clean test -DselectedTests=run-B-test
Дальнейшее чтение - плагин Maven surefire с использованием testng
Вы можете запустить один тестовый класс, но не один метод внутри тестового класса. Вы используете простое имя класса, а не полное имя класса. Итак, если у вас есть тест в «org.sonatype.test.MyTest» и это единственный тест, который вы хотите запустить, ваша командная строка будет выглядеть так:
mvn test -Dtest=MyTest
Насколько мне известно, надёжный плагин не предоставляет никакого способа сделать это. Но не стесняйтесь, чтобы открыть вопрос :)
mvn test -Dtest=classname
синтаксис.