2009-12-09 4 views
394

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

mvn test -Dtest=classname 

Но я хочу, чтобы запустить отдельный метод и -Dtest не кажется = classname.methodname работать.

+3

Мне было бы интересно узнать, как это сделать. Однако, если я обнаружил, что делаю это довольно часто, я думаю, что тест может быть кандидатом для разделения на свой собственный класс, поэтому вы можете использовать синтаксис 'mvn test -Dtest = classname'. –

+0

Вы хотите знать, как это сделать с помощью командной строки? Или использование IDE (eclipse) будет работать для вас? –

+0

Я смотрел на командную строку. Я думаю, что плагин junit eclipse позволит вам это сделать. – BillMan

ответ

519

Для запуска одного метода испытания в Maven, вам необходимо предоставить команду как:

mvn -Dtest=TestCircle#xyz test 

где TestCircle является тест имя класса и xyz - метод тестирования.

Дикие карточные персонажи также работают; как в имени метода, так и в имени класса.

Если вы тестируете в проекте с несколькими модулями, укажите модуль, в котором находится тест, с -pl <module-name>.

Для интеграции тестов использовать it.test=... вариант вместо test=...:

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test 
+0

Хотелось бы, чтобы был способ слияния ответы ... это правильно, но ссылка, взятая из нее, находится в другом сообщении: http://maven.apache.org/plugins/maven-surefire-plugin/examples/single-test.html – cjstehno

+0

Мне было интересно, имя класса должно быть полностью квалифицированным именем класса с именем пакета и ответом на то, что при работе полностью квалифицированного имени также работает только имя класса, Maven выглядит для вас классом. Я предполагаю, что если имя неоднозначно, оно выдаст ошибку. – stivlo

+59

a всегда получает ошибку: ** Никаких тестов не было выполнено ** –

-7

Насколько мне известно, surefire plugin не предоставляет никаких средств для этого. Но не стесняйтесь открывать issue :)

+4

-1, потому что это возможно, см. Главный ответ – stivlo

-5

Вы можете запустить только один тестовый класс, но не один метод в тестовом классе. Вы используете простое имя класса, а не полное имя класса. Так что, если у вас есть тест на «org.sonatype.test.MyTest», и что это единственный тест, который вы хотите запустить, командная строка будет выглядеть следующим образом:

mvn test -Dtest=MyTest 
+0

Я протестировал решение, описанное в предыдущих комментариях в проекте с одним модулем, так что этот комментарий не соответствует действительности. – tonio

+1

Возможно, это было в 2009 году. – flurdy

14

Что мне делать с моим TestNG, (извините, JUnit не поддерживает это) тестовые примеры, я могу назначить группу теста я хочу запустить

@Test(groups="broken") 

А потом просто запустить «MVN -Dgroups = сломана».

+1

Это хороший ответ. В моем случае тест попытался выполнить, но некоторые компоненты шва не были настроены правильно, поэтому похоже, что это также пропускает часть кода установки. –

+1

Исправить. Вам нужно либо поместить group = в ваш @BeforeMethod, либо сделать @BeforeMethod (alwaysRun = true) – tunaranch

+0

Пожалуйста, дайте мне знать, что такое группа здесь, так как я получаю компиляцию. –

3

Новые версии JUnit содержит Категории бегуна: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

Но не Maven на основе отпуская процедура JUnit, так Maven пользователи должны поместить его вручную в репозиториях.

+1

Ницца. Но я не вижу, как это отвечает на вопрос. –

+2

Subj поддерживается версией maven-surefire-плагина версии 2.7.3: http://maven.apache.org/plugins/maven-surefire-plugin/examples/single-test.html –

3

тест параметр упоминается tobrien позволяет указать метод с использованием # перед именем метода. Это должно работать для JUnit и TestNG. Я никогда не пробовал, просто прочитать его на Surefire Plugin page:

Specify this parameter to run individual tests by file name, overriding the includes/excludes parameters. Each pattern you specify here will be used to create an include pattern formatted like **/${test}.java, so you can just type "-Dtest=MyTest" to run a single test called "foo/MyTest.java". This parameter overrides the includes/excludes parameters, and the TestNG suiteXmlFiles parameter. since 2.7.3 You can execute a limited number of method in the test with adding #myMethod or #my*ethod. Si type "-Dtest=MyTest#myMethod" supported for junit 4.x and testNg

19

Там есть проблема с 2,12 верными. Это то, что происходит со мной, изменяя maven-surefire-plugin с 2.12 до 2.11:

  1. MVN тест -Dtest = DesignRulesTest

    Result:
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project pmd: No tests were executed!

  2. тест MVN -Dtest = DesignRulesTest

    Result: [INFO] --- maven-surefire-plugin:2.11:test (default-test) @ pmd --- ... Running net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 4, Time elapsed: 4.009 sec

+4

Работает снова в 2.12.1 или новее. – yurez

+0

Исправлено: «Никаких тестов не было!» путем обновления до 2.14 – alfonx

12

Запуск набор методов в одном тесте класса С версией 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 

Проверить это link about single tests

+0

В моем случае мне пришлось дважды указать тестовое имя TestClass # как mvn -Dtest = "TestCircle # myTest" test –

+0

@PratikKhadloya Любая идея, как это работает для зависимых тестов? Скажем, у меня есть test1(), test2(), test3() в TestClass, а test2 зависит от test1. Как я могу запустить test2()? – Ziska

+1

Я думаю, что если у вас есть зависимости между вашими испытаниями, вы делаете что-то неправильно. Каждый тест должен быть независимым от других тестов. Вам нужно удалить муфту между ними. –

2

Эта команда работает! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Обратите внимание, что «-DTest» начинается с UPPER CASE «T».