我知道您可以使用以下命令运行某个类中的所有测试:
mvn test -Dtest=classname
但我想运行一个单独的方法, -Dtest=classname.methodname 似乎不起作用。
mvn test -Dtest=classname
语法。
要在 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
Surefire 2.12 存在问题。这就是我将 maven-surefire-plugin 从 2.12 更改为 2.11 时发生的事情:
mvn test -Dtest=DesignRulesTest 结果:[错误] 无法在项目 pmd 上执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test):未执行任何测试! 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
从 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”开头。
从测试类运行单个测试方法。
mvn test -Dtest=Test1#methodname
其他相关用例
mvn test // 运行所有的单元测试类
mvn test -Dtest=Test1 // 运行单个测试类
mvn test -Dtest=Test1,Test2 //运行多个测试类
mvn test -Dtest=Test1#testFoo* // 从测试类运行匹配模式 'testFoo*' 的所有测试方法。
mvn test -Dtest=Test1#testFoo*+testBar* // 运行测试类中匹配模式 'testFoo*' 和 'testBar*' 的所有测试方法。
我尝试了该线程中提供的几种解决方案,但是它们不适用于依赖于不同模块的模块。在这种情况下,我必须使用附加参数从根模块运行 mvn
:-am
(--also-make
),它告诉 maven 构建您的测试模块所依赖的模块和 -DfailIfNoTests=false
,否则“没有测试处决!”出现错误。
mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false
根中的 pom.xml 部分:
<modules>
<module>A</module>
<module>B</module>
<modules>
B依赖于A。
tobrien 提到的 test 参数允许您在方法名称前使用 # 指定方法。这应该适用于 JUnit 和 TestNG。我从未尝试过,只是在 Surefire Plugin page 上阅读它:
指定此参数以按文件名运行单个测试,覆盖包含/排除参数。您在此处指定的每个模式都将用于创建格式为 **/${test}.java 的包含模式,因此您只需键入“-Dtest=MyTest”即可运行名为“foo/MyTest.java”的单个测试。此参数覆盖包含/排除参数和 TestNG suiteXmlFiles 参数。从 2.7.3 开始,您可以通过添加#myMethod 或#my*ethod 在测试中执行有限数量的方法。 junit 4.x 和 testNg 支持 Si 类型“-Dtest=MyTest#myMethod”
新版本的 JUnit 包含 Categories 运行器: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
进一步阅读 - Maven surefire plugin using testng
首先你需要清理你的 maven 项目
mvn clean
然后您可以使用运行特定文件和功能
mvn test -Dtest=testClassName#testCaseName
您需要指定要执行的 JUnit 测试类及其方法。
mvn test -Dtest=com.mycompany.AppTest#testMethod
https://metamug.com/article/java/build-run-java-maven-project-command-line.html#running-unit-tests
您可以运行单个测试类,但不能运行测试类中的单个方法。您使用类的简单名称而不是类的完全限定名称。因此,如果您在“org.sonatype.test.MyTest”中有一个测试,并且这是您想要运行的唯一测试,您的命令行将如下所示:
mvn test -Dtest=MyTest
不定期副业成功案例分享
-pl <module-name>
指定测试所在的模块。-DfailIfNoTests=false
跳过未经测试的项目。No Tests Were Executed
当您尝试从根项目运行测试并且有模块根本没有测试时发生。mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
请注意,“-DTest”以大写“T”开头。