使用maven运行单个测试方法

Bil*_*Man 490 java maven-2 unit-testing

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

mvn test -Dtest=classname
Run Code Online (Sandbox Code Playgroud)

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

小智 661

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

mvn test -Dtest=TestCircle#xyz test
Run Code Online (Sandbox Code Playgroud)

TestCircle测试类名称在哪里,xyz是测试方法.

外卡人物也有效; 在方法名称和类名称中.

如果要在多模块项目中进行测试,请指定测试所在的模块-pl <module-name>.

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

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
Run Code Online (Sandbox Code Playgroud)

  • 总是得到错误:**没有执行任何测试!** (71认同)
  • 如果您正在多模块项目中进行测试,则还需要使用`-pl <module-name>`指定测试所在的模块. (52认同)
  • 使用`-DfailIfNoTests = false`跳过未经测试的项目.当您尝试从根项目运行测试并且存在没有测试的模块时,会发生"没有执行测试". (19认同)
  • 我修复了"没有执行任何测试!" 升级到2.14: (15认同)
  • 通过降级到surefire 2.9修复了"No Tests Were Executed"错误 (4认同)
  • 这个命令有效!! `mvn"-DTest = JoinTeamTestCases#validateJoinTeam"test`注意"-DTest"以UPPER CASE'T'开头. (3认同)
  • 我只花了45分钟没有成功,直到我意识到我在测试类名末尾错过了"测试". (3认同)
  • 等等,"解决方案"是恢复旧版本?那些真正需要更多最新版本的万无一失的人呢? (2认同)

Duc*_*bri 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.12.1或更高版本中再次使用. (5认同)

tun*_*nch 16

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

@Test(groups="broken")
Run Code Online (Sandbox Code Playgroud)

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


Pra*_*ddi 14

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

注意:junit 4.x和TestNG支持它.

您必须使用以下语法

mvn -Dtest=TestCircle#mytest test
Run Code Online (Sandbox Code Playgroud)

你也可以使用模式

mvn -Dtest=TestCircle#test* test
Run Code Online (Sandbox Code Playgroud)

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

mvn -Dtest=TestCircle#testOne+testTwo test
Run Code Online (Sandbox Code Playgroud)

检查此链接有关单个测试

  • 我想如果你的测试中有依赖关系,你就会做错事.每项测试应独立于其他测试.您需要删除它们之间的耦合. (3认同)
  • 以我为例,我必须对TestClass#test名称加双引号,例如mvn -Dtest =“ TestCircle#myTest” test (2认同)

vik*_*kas 10

这个命令有效!! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test请注意,"-DTest"以UPPER CASE'T'开头.

  • *不适用于* SureFire 2.18.x;它只是运行所有测试。 (3认同)

dei*_*uel 10

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

mvn clean

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

mvn test -Dtest=testClassName#testCaseName


小智 9

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

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

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

  3. 单个类中的单个方法:mvn test -Dtest = CLASS_NAME1#METHOD_NAME_1

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


jwp*_*pol 9

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

mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false
Run Code Online (Sandbox Code Playgroud)

根目录中的 pom.xml 部分:

<modules>
    <module>A</module>
    <module>B</module>
<modules>
Run Code Online (Sandbox Code Playgroud)

B 取决于 A。


Yat*_*oel 7

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

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.