2

我希望在 Maven 中运行一些集成测试,并使用以下方式按类别对它们进行分组:

界面:

package com.path.for.testing;

public interface SlowTests {

}

测试类:

import com.path.for.testing.SlowTests

@Category(SlowTests.class)
public class SlowTest {
    ...
}

Pom 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  ...
  <profiles>
    ...
    <profile>
      <id>functional-test-slow-tests</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
      <plugins>
        <plugin>
          <artifactId>maven-failsafe-plugin</artifactId>
          <executions>
            <execution>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
              <configuration>
                <groups>com.path.for.testing.SlowTests</groups>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
      </build>
    </profile>
  </profiles>
</project>

我运行它: mvn clean install -P functional-test-slow-tests

我的问题是,当它运行时,它似乎循环通过所有测试,而不仅仅是指定的测试。分类不适用于集成测试吗?还是我做错了什么?我会根据要求更新更多信息。非常感谢有关此问题的任何帮助或指导,我对此很陌生,很可能我遗漏了一些明显的东西。谢谢。


编辑以响应 User944849:

当使用 -X 参数运行时,我认为故障安全插件会被多次执行。我还添加了您建议的新执行 ID。这是我在构建项目时得到的:

[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-failsafe-plugin:2.12:integration-test (default-integration-tests)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>

...

[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-failsafe-plugin:2.12:verify (default-integration-tests)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>

测试使用您建议的新 ID,但我仍然得到相同的结果,即不需要的测试仍在运行。

4

1 回答 1

2

如果您使用 运行-X,您是否看到故障安全插件的多次执行?显示的配置不包括,<id>因此 Maven 可能会将您配置的执行添加到其默认值。默认运行与模式匹配的任何测试**/IT*.java, **/*IT.java, **/*ITCase.java

如果这是正在发生的事情,<id>请像这样在执行中添加一个:

<execution>
    <id>default-integration-tests</id>
    ....

将为集成测试阶段重新定义 Maven 的默认插件执行以执行您想要的操作。


更新

@Brad,感谢您测试我的理论,感谢 @khmarbaise 给我另一个想法。

2个目标执行是您应该拥有的。我没有发现您的配置有任何问题,因此我检查了打开的 JIRA 是否有故障安全插件,我发现了一个可能导致使用错误 JUnit 提供程序的相关问题。如果这是您遇到的问题,您可能必须在此处定义的插件配置中手动指定 JUnit47 提供程序。

于 2012-05-11T23:52:13.713 回答