关于java:使用maven运行单个测试方法

Run a single test method with maven

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

1
mvn test -Dtest=classname

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


要在Maven中运行单个测试方法,需要提供以下命令:

1
mvn test -Dtest=TestCircle#xyz test

其中,TestCircle是测试类名,xyz是测试方法。

通配符也可以使用;包括方法名和类名。

如果您在一个多模块项目中进行测试,请指定该测试与-pl 一起使用的模块。

对于集成测试,使用it.test=...选项而不是test=...

1
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test


Surefire 2.12有问题。这就是我将Maven Surefire插件从2.12更改为2.11时发生的情况:

  • mvn test -Dtest=DesignRulesTest


    Result:
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project pmd: No tests were executed!

  • mvn test -Dtest=DesignRulesTest


    Result:
    [INFO] --- maven-surefire-plugin:2.11:test (default-test) @ pmd ---
    ...
    Running net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest
    Tests run: 5, Failures: 0, Errors: 0, Skipped: 4, Time elapsed: 4.009 sec


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

    1
    @Test(groups="broken")

    然后简单地运行"mvn-dgroups=broken"。


    在单个测试类中运行一组方法对于版本2.7.3,您只能在一个测试类中运行n个测试。

    注意:它支持junit 4.x和testng。

    必须使用以下语法

    1
    mvn -Dtest=TestCircle#mytest test

    你也可以用图案

    1
    mvn -Dtest=TestCircle#test* test

    从Surefire 2.12.1开始,您可以选择多种方法(此时仅限JUnit4x,欢迎使用补丁)

    1
    mvn -Dtest=TestCircle#testOne+testTwo test

    检查有关单个测试的链接


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

  • full package : mvn test -Dtest="com.oracle.tests.**"

  • all method in a class : mvn test -Dtest=CLASS_NAME1

  • single method from single class :mvn test -Dtest=CLASS_NAME1#METHOD_NAME1

  • multiple method from multiple class : mvn test -Dtest=CLASS_NAME1#METHOD_NAME1,CLASS_NAME2#METHOD_NAME2


  • 这个命令有效!!mvn"-DTest=JoinTeamTestCases#validateJoinTeam" test注意"-dtest"以大写"t"开头。


    Tobrien提到的测试参数允许您在方法名称之前使用指定方法。这对于JUnit和Testng应该是有效的。我从未尝试过,只需在Surefire插件页面上阅读:

    Specify this parameter to run individual tests by file name, overriding the includes/excludes parameters. Each pattern you specify here will be used to create an include pattern formatted like **/${test}.java, so you can just type"-Dtest=MyTest" to run a single test called"foo/MyTest.java".
    This parameter overrides the includes/excludes parameters, and the TestNG suiteXmlFiles parameter. since 2.7.3 You can execute a limited number of method in the test with adding #myMethod or #my*ethod. Si type"-Dtest=MyTest#myMethod" supported for junit 4.x and testNg


    JUnit的新版本包含类别运行程序:http://kentbeck.github.com/junit/doc/releasenotes4.8.html

    但是JUnit的发布过程并不是基于Maven的,所以Maven用户必须手动将其放到自己的存储库中。


    从Surefire插件版本2.22.1(可能更早)开始,使用testng.xml时,可以使用testnames属性运行单个测试。

    给定以下testng.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?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>
                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>

    从命令行

    1
    mvn clean test -DselectedTests=run-B-test

    进一步阅读-maven surefire插件使用testng


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

    1
    mvn test -Dtest=MyTest


    据我所知,Surefire插件没有提供任何实现这一点的方法。但请随意打开一个问题:)