我想包含/排除JUnit分类的测试。我在通用模块中定义了标记接口StressTest。我在moduleA中引用StressTest。我在根pom.xml中具有以下maven-surefire-plugin

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
<configuration>
  <excludedGroups>com.mycompany.project.common.utils.StressTest</excludedGroups>
</configuration>
</plugin>


运行mvn测试时,在构建另一个模块时得到以下信息。

Unable to load category: com.mycompany.project.common.utils.StressTest


我应该在哪里编写我的StressTest接口?

最佳答案

为了使surefire能“找到”您的@Category类,它必须位于从Maven项目的依赖树生成的类路径中。

这个例外...


  无法加载类别:com.mycompany.project.common.utils.StressTest


...强烈暗示任何工件包含com.mycompany.project.common.utils.StressTest都不是您的moduleA的声明依赖项。

因此,您需要在com.mycompany.project.common.utils.StressTest上添加对包含moduleA的任何工件的依赖。如果此依赖项的唯一目的是提供@Category类,则使此依赖项测试的作用域例如

<dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>common.utils</artifactId>
    <version>...</version>
    <scope>test</scope>
</dependency>


此外,如果com.mycompany.project.common.utils.StressTest位于测试树中,而不是公共utils模块中的主树中,那么您将需要创建一个包含公共utils模块的测试类的JAR。您可以通过在公用程序的pom.xml中添加以下maven-jar-plugin声明来做到这一点:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <executions>
      <execution>
        <goals>
          <goal>test-jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>


然后,您可以在<type>test-jar</type>的依赖项中使用moduleA依赖于此,例如:

<dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>common.utils</artifactId>
    <version>...</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

10-04 14:13