我的 pom.xml 中有以下配置
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<excludes>
<exclude>**/DocumentChangeSubscriberTest.java</exclude>
</excludes>
</configuration>
</plugin>
(...)
DocumentChangeSubscriberTest
是一个 arquillian 测试,我只想在指定的配置文件中运行。
当我输入 mvn install
时,所有测试都会运行,甚至是我想排除的 DocumentChangeSubscriberTest
。
如何从默认(匿名)配置文件中排除测试?
我尝试了
<includes><include>...
,它工作正常 - 仅运行了包含的测试。
我看到 maven Surefire 测试插件即使被排除在外也会运行测试:但这对我不起作用。我也尝试了很多版本的
maven-surefire-plugin
,但没有结果。有任何想法吗?
虽然您已经找到了答案,但还有一个更简单的解决方案。
无需使用
<excludes>
标签。坚持 maven 命名约定就足够了。只需使用 *IT
后缀命名您的集成测试(例如:MyClassIT.java
),然后让 maven-failsafe-plugin
完成其工作。
请记住,
maven-surefire-plugin
旨在运行您的单元测试。这意味着所有具有以下通配符模式的测试类:
Test*.java
*Test.java
*TestCase.java
另一方面,
maven-failsafe-plugin
旨在运行您的集成测试,并将自动包含具有以下通配符模式的所有测试类:
IT*.java
*IT.java
*ITCase.java
您的 arquillian 测试肯定是一个集成测试,因此将其重命名为 DocumentChangeSubscriberIT.java 将解决您所有的问题。
顺便说一句。 这篇文章对于从集成测试中分离单元测试也可能有用。
希望它对某人有帮助。
虽然问题已经解决,但如果有人遇到类似的排除问题,我会发布此内容。 我遇到了类似的问题,其中我的排除不适用于 maven-failsafe-plugin。我使用排除来排除运行一些集成测试。
我使用
mvn verify
来运行集成测试。
就我而言,
<excludes>
<exclude>**/something/*Test.java</exclude>
</excludes>
如果我使用 -Dit.test 选项,则不起作用
即
mvn verify -Dit.test="<some_package>"
但是,如果我不指定 -Dit.test,则可以正常工作。
即
mvn verify
好的,排除测试是可行的。就像拼错我的班级名称一样简单:
DocumentChangeSubsriberTest.java
而不是DocumentChangeSubscriberTest.java
。
我有一个类似的问题,只是为了抛出另一件事供人们查看:我的 maven-surefire-plugin,如上所述,意外地在
<reporting><plugins><plugin>....</plugin></plugins></reporting>
下声明,但当然需要在 <build><plugins><plugin>...</plugin></plugins></build>
下。顶部 <reporting>
和 <build>
规格位于页面上方和下方,因此可以验证是否有人遇到相同的错误。
这个问题已经在这个线程中得到了回答(或者至少是一个非常相似的问题):How can I Skipped test in maven install goal, while running those in maven test goal?
看看,也许会有帮助!简单的答案是,如果不使用自定义配置文件,您想要做的事情就不是一个选项(但在该线程中对此有更好的解释)。