Maven(surefire)测试插件排除不工作

问题描述 投票:0回答:5

我的 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
,但没有结果。有任何想法吗?

java maven jboss-arquillian
5个回答
16
投票

虽然您已经找到了答案,但还有一个更简单的解决方案。

无需使用

<excludes>
标签。坚持 maven 命名约定就足够了。只需使用
*IT
后缀命名您的集成测试(例如:
MyClassIT.java
),然后让
maven-failsafe-plugin
完成其工作。

请记住,

maven-surefire-plugin
旨在运行您的单元测试。这意味着所有具有以下通配符模式的测试类:

  1. Test*.java
  2. *Test.java
  3. *TestCase.java

另一方面,

maven-failsafe-plugin
旨在运行您的集成测试,并将自动包含具有以下通配符模式的所有测试类:

  1. IT*.java
  2. *IT.java
  3. *ITCase.java

您的 arquillian 测试肯定是一个集成测试,因此将其重命名为 DocumentChangeSubscriberIT.java 将解决您所有的问题。

顺便说一句。 这篇文章对于从集成测试中分离单元测试也可能有用。

希望它对某人有帮助。


5
投票

虽然问题已经解决,但如果有人遇到类似的排除问题,我会发布此内容。 我遇到了类似的问题,其中我的排除不适用于 maven-failsafe-plugin。我使用排除来排除运行一些集成测试。

我使用

mvn verify
来运行集成测试。

就我而言,

 <excludes>
   <exclude>**/something/*Test.java</exclude>
</excludes>

如果我使用 -Dit.test 选项,则不起作用

mvn verify -Dit.test="<some_package>"


但是,如果我不指定 -Dit.test,则可以正常工作。

mvn verify


4
投票

好的,排除测试是可行的。就像拼错我的班级名称一样简单:

DocumentChangeSubsriberTest.java
而不是
DocumentChangeSubscriberTest.java


2
投票

我有一个类似的问题,只是为了抛出另一件事供人们查看:我的 maven-surefire-plugin,如上所述,意外地在

<reporting><plugins><plugin>....</plugin></plugins></reporting>
下声明,但当然需要在
<build><plugins><plugin>...</plugin></plugins></build>
下。顶部
<reporting>
<build>
规格位于页面上方和下方,因此可以验证是否有人遇到相同的错误。


0
投票

这个问题已经在这个线程中得到了回答(或者至少是一个非常相似的问题):How can I Skipped test in maven install goal, while running those in maven test goal?

看看,也许会有帮助!简单的答案是,如果不使用自定义配置文件,您想要做的事情就不是一个选项(但在该线程中对此有更好的解释)。

© www.soinside.com 2019 - 2024. All rights reserved.