632

我知道您可以使用以下命令运行某个类中的所有测试:

mvn test -Dtest=classname

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

4

14 回答 14

850

要在 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
于 2011-05-13T06:53:59.270 回答
31

Surefire 2.12 存在问题。这就是我将 maven-surefire-plugin 从 2.12 更改为 2.11 时发生的事情:

  1. mvn test -Dtest=DesignRulesTest

    结果:
    [错误] 无法执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.12:项目 pmd 上的测试(默认测试):未执行任何测试!

  2. 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 秒

于 2012-10-14T22:10:14.200 回答
18

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

@Test(groups="broken")

然后只需运行'mvn -Dgroups=broken'。

于 2009-12-09T23:13:54.970 回答
15

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

检查有关单个测试的此链接

于 2013-02-28T14:22:33.163 回答
12

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

  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

于 2018-07-02T03:10:08.327 回答
11

该命令有效! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test请注意,“-DTest”以大写“T”开头。

于 2017-08-07T11:14:13.937 回答
9

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

mvn test -Dtest=Test1#methodname


其他相关用例

  • mvn test // Run all the unit test classes

  • mvn test -Dtest=Test1 // Run a single test class

  • mvn test -Dtest=Test1,Test2 // Run multiple test classes

  • mvn test -Dtest=Test1#testFoo* // Run all test methods that match pattern 'testFoo*' from a test class.

  • mvn test -Dtest=Test1#testFoo*+testBar* // Run all test methods match pattern 'testFoo*' and 'testBar*' from a test class.

于 2020-07-20T16:12:34.630 回答
5

我尝试了该线程中提供的几种解决方案,但是它们不适用于依赖于不同模块的模块。在这种情况下,我必须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。

于 2020-07-17T12:54:37.963 回答
4

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

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

于 2011-04-13T17:27:22.793 回答
3

新版本的 JUnit 包含 Categories 运行器:http: //kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

但是 JUnit 的发布过程不是基于 maven 的,所以 maven 用户必须手动将它放到他们的存储库中。

于 2009-12-10T14:10:01.933 回答
3

As of surefire plugin version 2.22.1 (possibly earlier) you can run single test using testnames property when using testng.xml

Given a following 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> 

with the 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>

From command line

mvn clean test -DselectedTests=run-B-test

Further reading - Maven surefire plugin using testng

于 2018-11-08T01:45:48.880 回答
3

首先你需要清理你的 maven 项目

mvn clean

然后您可以使用运行特定文件和功能

mvn test -Dtest=testClassName#testCaseName

于 2021-11-23T18:59:11.580 回答
1

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

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

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

于 2021-10-23T10:21:34.990 回答
-4

您可以运行单个测试类,但不能运行测试类中的单个方法。您使用类的简单名称而不是类的完全限定名称。因此,如果您在“org.sonatype.test.MyTest”中有一个测试,并且这是您想要运行的唯一测试,您的命令行将如下所示:

mvn test -Dtest=MyTest
于 2009-12-09T15:36:09.197 回答