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”开头

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

  • 完整包:mvn测试-Dtest=“com.oracle.tests.*”

  • 类中的所有方法:mvn测试-Dtest=class\u name 1

  • 单个类中的单个方法:mvn测试-Dtest=class_NAME1#method_NAME1

  • 来自多个类的多个方法:mvn测试-Dtest=class_NAME1#method_NAME1,class_NAME2#method_NAME2


  • 从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>