Java 使用maven运行单个测试方法
我知道您可以使用以下方法运行某个类中的所有测试:Java 使用maven运行单个测试方法,java,maven,unit-testing,maven-2,maven-3,Java,Maven,Unit Testing,Maven 2,Maven 3,我知道您可以使用以下方法运行某个类中的所有测试: mvn test -Dtest=classname 但是我想运行一个单独的方法,而-Dtest=classname.methodname似乎不起作用。据我所知,没有提供任何方法来实现这一点。但是请随意打开:)您可以运行单个测试类,但不能在测试类中运行单个方法。您使用的是类的简单名称,而不是类的完全限定名称。因此,如果您在“org.sonatype.test.MyTest”中有一个测试,并且该测试是您想要运行的唯一测试,那么您的命令行如下所示:
mvn test -Dtest=classname
但是我想运行一个单独的方法,而-Dtest=classname.methodname似乎不起作用。据我所知,没有提供任何方法来实现这一点。但是请随意打开:)您可以运行单个测试类,但不能在测试类中运行单个方法。您使用的是类的简单名称,而不是类的完全限定名称。因此,如果您在“org.sonatype.test.MyTest”中有一个测试,并且该测试是您想要运行的唯一测试,那么您的命令行如下所示:
mvn test -Dtest=MyTest
我使用TestNG(抱歉,JUnit不支持这个)测试用例所做的是,我可以为我想要运行的测试分配一个组
@Test(groups="broken")
然后只需运行“mvn-Dgroups=break”。JUnit的新版本包含以下类别: 但是JUnit的发布过程不是基于maven的,因此maven用户必须手动将其放入他们的存储库。tobrien提到的测试参数允许您在方法名称之前使用#指定方法。这应该适用于JUnit和TestNG。我从来没有试过,只是在网上读一下: 指定此参数以按文件名运行单个测试,覆盖includes/excludes参数。这里指定的每个模式都将用于创建一个类似**/${test}.java格式的include模式,因此您只需键入“-Dtest=MyTest”即可运行一个名为“foo/MyTest.java”的测试。 此参数覆盖includes/excludes参数和TestNG suiteXmlFiles参数。从2.7.3开始,您可以通过添加#myMethod或#my*method在测试中执行有限数量的方法。JUnit4.x和testNg支持Si类型“-Dtest=MyTest#myMethod”
要在Maven中运行单个测试方法,需要提供以下命令:
mvn test -Dtest=TestCircle#xyz test
其中,TestCircle
是测试类名,xyz
是测试方法
通配符也起作用;在方法名和类名中
如果在多模块项目中进行测试,请使用
-pl
指定测试所在的模块
对于集成测试,请使用it.test=…
选项,而不是test=…
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
mvn-pl-Dit.test=TestCircle#xyz集成测试
surefire 2.12存在问题。
这就是我将maven surefire插件从2.12更改为2.11时发生的情况:
mvn测试-Dtest=DesignRulesTest
结果:[错误]无法执行目标org.apache.maven.plugins:maven surefire plugin:2.12:对项目pmd进行测试(默认测试):未执行任何测试强>
mvn测试-Dtest=DesignRulesTest
结果:
[信息]---maven surefire插件:2.11:测试(默认测试)@pmd---
...
正在运行net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest
测试运行:5,失败:0,错误:0,跳过:4,运行时间:4.009秒
在单个测试类中运行一组方法 对于版本2.7.3,在单个测试类中只能运行n个测试 注意:JUnit4.x和TestNG支持它 必须使用以下语法
mvn -Dtest=TestCircle#mytest test
你也可以使用模式
mvn -Dtest=TestCircle#test* test
从surefire 2.12.1开始,您可以选择多种方法(目前仅限JUnit4X,欢迎使用修补程序)
检查此项此命令有效!!
mvn“-DTest=JoinTeamTestCases#validatejonteam”test
注意“-DTest”以大写字母“T”开头 您可以使用以下语法运行特定的测试类和方法:
从surefire插件版本2.22.1(可能更早)开始,您可以在使用testng.xml时使用testnames属性运行单个测试
<?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>
给定以下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>
进一步阅读-我尝试了此线程中提供的几种解决方案,但它们不适用于依赖于不同解决方案的模块。在这种情况下,我必须使用附加参数从根模块运行
mvn
:-am
(--也叫make
),这会告诉maven您的测试模块所依赖的构建模块,并且-DfailIfNoTests=false
,否则会出现“未执行任何测试!”错误
mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false
根目录中的pom.xml节:
<modules>
<module>A</module>
<module>B</module>
<modules>
A.
B
B取决于A。从测试类运行单个测试方法。
mvn测试-Dtest=Test1#methodname
其他相关用例
mvn测试//运行所有单元测试类
mvn测试-Dtest=Test1//运行单个测试类
mvn测试-Dtest=Test1,Test2//运行多个测试类
mvn test-Dtest=Test1#testFoo*//从测试类运行与模式“testFoo*”匹配的所有测试方法。
mvn test-Dtest=Test1#testFoo*+testBar*//从测试类运行与模式“testFoo*”和“testBar*”匹配的所有测试方法。
mvn test-Dtest=classname
语法。您想知道如何仅通过命令行来完成吗??或者使用IDE(eclipse)对你有用吗?我正在看一个命令行。我认为JUnitEclipse插件将允许您这样做。我是为Maven1做的。我记得,它涉及到对JUnit进行更改,JUnit负责检查test class.Nice。但是我看不出这是如何回答这个问题的。2.7.3版本的maven surefire插件支持Subc:这是一个尝试
mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false
<modules>
<module>A</module>
<module>B</module>
<modules>