使用maven运行单个测试方法

时间:2009-12-09 13:44:44

标签: java unit-testing maven-2

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

mvn test -Dtest=classname

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

13 个答案:

答案 0 :(得分:623)

要在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

答案 1 :(得分:25)

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

  1. mvn test -Dtest=DesignRulesTest

      

    结果:
      [错误]无法在项目pmd上执行目标org.apache.maven.plugins:maven-surefire-plugin: 2.12 :test(default-test):没有执行任何测试!

  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秒

答案 2 :(得分:16)

我对我的TestNG做了什么,(抱歉,JUnit不支持这个)测试用例是我可以为我想要运行的测试指定一个组

@Test(groups="broken")

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

答案 3 :(得分:14)

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

选中此link about single tests

答案 4 :(得分:9)

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

  
      
  1. 完整软件包:mvn test -Dtest =“ com.oracle.tests。**”

  2.   
  3. 类中的所有方法:mvn test -Dtest = CLASS_NAME1

  4.   
  5. 单个类中的单个方法:mvn test -Dtest = CLASS_NAME1#METHOD_NAME1

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

  8.   

答案 5 :(得分:6)

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

答案 6 :(得分:4)

tobrien提到的 test 参数允许您在方法名称之前使用指定方法。这适用于JUnit和TestNG。我从未尝试过,只需在Surefire Plugin page上阅读:

  

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

答案 7 :(得分:3)

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

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

答案 8 :(得分:2)

从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

答案 9 :(得分:2)

我尝试了此线程中提供的几种解决方案,但是它们不适用于依赖于另一个模块的模块。在那种情况下,我必须从根模块运行mvn并使用其他参数:-am--also-make),它告诉maven构建测试模块所依赖的模块以及{{1 }},否则“未执行任何测试!”错误出现。

-DfailIfNoTests=false
根目录中的

pom.xml部分:

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

B取决于A。

答案 10 :(得分:2)

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

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.

答案 11 :(得分:-5)

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

mvn test -Dtest=MyTest

答案 12 :(得分:-9)

据我所知,surefire plugin并未提供任何方法。但随意打开issue:)