我知道您可以使用以下方法在某个类中运行所有测试:
mvn test -Dtest=classname
但我想运行一个单独的方法,-dtest=classname.methodname似乎不起作用。
我也有兴趣知道怎么做。但是,如果我发现自己经常这样做,我认为测试可能是一个可以拆分为自己的类的候选者,因此您可以使用mvn test -Dtest=classname语法。
您想知道如何只通过命令行执行吗?或者使用一个IDE(Eclipse)会对你有用?
我在看命令行。我认为JUnitEclipse插件将允许您这样做。
我是为马文一号做的。正如我回忆的,它涉及到对JUnit进行更改,JUnit负责反思测试类。
要在Maven中运行单个测试方法,需要提供以下命令:
mvn test -Dtest=TestCircle#xyz test
其中,TestCircle是测试类名,xyz是测试方法。
通配符也可以使用;包括方法名和类名。
如果您在一个多模块项目中进行测试,请指定该测试与-pl一起使用的模块。
对于集成测试,使用it.test=...选项而不是test=...:
mvn -pl -Dit.test=TestCircle#xyz integration-test
我希望有一种方法可以合并答案…这是正确的,但它的链接来自另一个帖子:maven.apache.org/plugins/maven-surefire-plugin/examples/…
我想知道类名是否应该是一个完全限定的类名,带有包名,答案是,虽然完全限定的名称有效,但也只有类名有效,Maven会为您查找类。我想如果名称不明确,它会发出一个错误。
A始终获取错误:未执行任何测试!
修正了"未执行测试"的错误,将其降级为Surefire 2.9。
所以等等,"解决方案"是恢复到旧版本?我们中那些真正需要更新版本的Surefire的人呢?
我修正了"没有执行测试!"升级至2.14:
如果您在一个多模块项目中进行测试,那么您还需要指定测试在-pl中的模块。
我在使用Surefire2.9进行测试时遇到了同样的问题,但是版本2.14和当前的最后2.17工作。
使用-DfailIfNoTests=false跳过没有测试的项目。当您尝试从根项目运行测试时,会发生No Tests Were Executed,并且存在完全没有测试的模块。
我也得到了No Tests Were Executed !,因为我有jUnit和TestNg在Maven项目的依赖关系中。删除TestNg或将@Test注释更改为@org.testng.annotations.Test为我解决了问题。
运行集成测试时,阶段必须是"集成测试"而不是"测试"。
这个命令有效!!mvn"-DTest=JoinTeamTestCases#validateJoinTeam" test注意"-dtest"以大写字母"t"开头。
我只花了45分钟没有成功,直到我意识到在我的测试类名末尾我错过了"测试"。
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
在2.12.1或更高版本中再次工作。
修正了"没有执行测试!"升级至2.14
如果使用@Category(IntegrationTest.class),使用-Dit.test=ClassName,否则即使使用最新的插件版本,也会得到No tests were executed!。
我对我的测试所做的,(抱歉,JUnit不支持这个)测试用例是我可以为要运行的测试分配一个组
@Test(groups="broken")
然后简单地运行"mvn-dgroups=broken"。
这是一个很好的答案。在我的例子中,测试试图运行,但是一些Seam组件没有正确设置,所以看起来这也跳过了部分设置代码。
对的。您需要在@beforemethod中放入groups=breaked,或者执行@beforemethod(alwaysrun=true)
请告诉我这里的组是什么,因为我有编译问题。
在单个测试类中运行一组方法对于版本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
检查有关单个测试的链接
在我的例子中,我不得不重复引用测试类测试名,比如mvn-dtest="testcircle my test"测试
@Pratikkhadloya知道它在依赖测试中是如何工作的吗?比如,我在testclass中有test1()、test2()、test3()方法,test2依赖于test1。如何只运行test2()?
我认为如果你的测试中有依赖性,你就错了。每个测试都应该独立于其他测试。你需要拆下它们之间的联接器。
可以使用以下语法运行特定的测试类和方法:
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"开头。
不适用于Surefire 2.18.x;它只运行所有测试。
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用户必须手动将其放到自己的存储库中。
很好。但我不明白这是怎么回答这个问题的。
SUBJ支持Maven Surefire插件的2.7.3版本:maven.apache.org/plugins/maven Surefire plugin/examples/…
从Surefire插件版本2.22.1(可能更早)开始,使用testng.xml时,可以使用testnames属性运行单个测试。
给定以下testng.xml
使用pom.xml
4.0.0
[...]
all-tests
[...]
org.apache.maven.plugins
maven-surefire-plugin
2.22.1
src/test/resources/testng.xml
testnames
${selectedTests}
[...]
从命令行
mvn clean test -DselectedTests=run-B-test
进一步阅读-maven surefire插件使用testng
可以运行单个测试类,但不能在测试类中运行单个方法。您使用的是类的简单名称,而不是类的完全限定名称。因此,如果您在"org.sonatype.test.mytest"中有一个测试,并且这是您想要运行的唯一测试,那么您的命令行应该如下所示:
mvn test -Dtest=MyTest
我在单个模块项目中测试了前面的注释中描述的解决方案,所以这个注释所说的不是真的。
在2009年,最初的答案可能是真的。
据我所知,Surefire插件没有提供任何实现这一点的方法。但请随意打开一个问题:)
-1因为这是可能的,请看前面的答案。