使用maven运行单个测试方法

我知道您可以使用以下方法在某个类中运行所有测试:

mvn test -Dtest=classname

但我想运行一个单独的方法和-Dtest=classname。Methodname似乎不起作用。

433860 次浏览

您可以运行单个测试类,但不能运行测试类中的单个方法。使用类的简单名称,而不是类的完全限定名称。如果你在"org。sontype。test "中有一个测试。MyTest”,这是你唯一想要运行的测试,你的命令行看起来是这样的:

mvn test -Dtest=MyTest

我用我的TestNG(对不起,JUnit不支持这个)测试用例所做的是,我可以为我想要运行的测试分配一个组

@Test(groups="broken")

然后简单地运行'mvn -Dgroups=broken'。

JUnit的新版本包含Categories运行器: # EYZ0 < / p >

但是JUnit的发布过程不是基于maven的,因此maven用户必须手动将其放入他们的存储库中。

tobrien提到的测验参数允许您在方法名称前使用来指定方法。这应该适用于JUnit和TestNG。我从来没有试过,只是在Surefire插件页面上读过:

指定此参数按文件名运行单个测试,覆盖包含/排除参数。您在这里指定的每个模式都将用于创建一个格式为**/${test}.java的包含模式,因此您只需键入"-Dtest=MyTest"来运行一个名为"foo/MyTest.java"的测试。 这个参数覆盖包含/排除参数,以及TestNG suiteXmlFiles参数。因为2.7.3你可以在测试中添加#myMethod或#my* method来执行有限数量的方法。junit 4支持Si类型“-Dtest=MyTest#myMethod”。x和testNg

要在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的结果:

  1. < p > # EYZ0

    < p >结果:< br > [ERROR]执行目标org.apache.maven失败。插件:maven-surefire-plugin:2.12:test (default-test)在项目pmd: 没有执行任何测试!

    李< /引用> < / >
  2. < p > # EYZ0

    < p >结果: ——maven-surefire-plugin:2.11:test (default-test) @ pmd—— ... 运行net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest 测试运行:5,失败:0,错误:0,跳过:4,时间流逝:4.009秒

    李< /引用> < / >

在单个测试类中运行一组方法 使用版本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

检查关于单个测试的链接

执行成功!! 注意“-DTest”以大写字母“T”开头。< / p >

您可以使用以下语法运行特定的测试类和方法:

  1. 完整包:mvn test -Dtest="com.oracle.tests.**"

  2. mvn test -Dtest=CLASS_NAME1

  3. mvn test -Dtest=CLASS_NAME1#METHOD_NAME1

  4. 来自多个类的多个方法:mvn test -Dtest=CLASS_NAME1#METHOD_NAME1,CLASS_NAME2#METHOD_NAME2

在surefire插件2.22.1版本(可能更早),你可以在使用testng.xml时使用testnames属性运行单个测试

给定下面的test .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

我尝试了这个线程中提供的几个解决方案,但它们不适用于依赖于不同的模块。在这种情况下,我必须从根模块运行mvn,并附带额外的参数:-am (--also-make),它告诉maven构建您的测试模块所依赖的模块和-DfailIfNoTests=false,否则“没有测试被执行!”出现错误。

mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false

root目录下的Pom.xml部分:

<modules>
<module>A</module>
<module>B</module>
<modules>

B取决于A。

从一个测试类运行一个测试方法。

# EYZ0


其他相关的用例

  • < p > # EYZ0

  • < p > # EYZ0

  • < p > # EYZ0

  • < p > # EYZ0

  • < p > # EYZ0

您需要指定JUnit测试类及其要执行的方法。

mvn test -Dtest=com.mycompany.AppTest#testMethod

https://metamug.com/article/java/build-run-java-maven-project-command-line.html#running-unit-tests

首先,你需要清理你的专业项目

# EYZ0

然后您可以使用运行特定的文件和函数

# EYZ0