Answers:
要在Maven中运行单个测试方法,您需要提供以下命令:
mvn test -Dtest=TestCircle#xyz test
TestCircle
测试类名称在哪里xyz
,测试方法在哪里。
通配符也可以;在方法名和类名中。
如果要在多模块项目中进行测试,请指定测试所在的模块-pl <module-name>
。
对于集成测试,请使用it.test=...
option而不是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”开头。
surefire 2.12存在问题。这就是我将maven-surefire-plugin从2.12更改为2.11时发生的事情:
mvn test -Dtest=DesignRulesTest
结果:
[错误]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.12:对项目pmd的测试(默认测试):未执行任何测试!
mvn test -Dtest=DesignRulesTest
结果:[INFO] --- maven-surefire-plugin:2.11: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
从surefire 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提到的test参数允许您在方法名称之前使用#来指定方法。这应该适用于JUnit和TestNG。我从未尝试过,只需在Surefire插件页面上阅读它即可:
指定此参数以按文件名运行单个测试,从而覆盖include / excludes参数。您在此处指定的每个模式都将用于创建格式为** / $ {test} .java的包含模式,因此您只需键入“ -Dtest = MyTest”即可运行一个名为“ foo / MyTest.java”的测试。此参数将覆盖include / excludes参数和TestNG suiteXmlFiles参数。从2.7.3开始,您可以通过添加#myMethod或#my * ethod在测试中执行有限数量的方法。junit 4.x和testNg支持Si类型“ -Dtest = MyTest#myMethod”
新版本的JUnit包含“类别”运行程序:http : //kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
但是JUnit的发布过程不是基于Maven的,因此Maven用户必须手动将其放入其存储库中。
从surefire插件版本2.22.1开始(可能更早),可以在使用testng.xml时使用testnames属性运行单个测试。
给定以下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
进一步阅读- 使用Testng的Maven surefire插件
据我所知,surefire插件没有提供任何方法来执行此操作。但是随时打开一个问题 :)
mvn test -Dtest=classname
语法。