8

我想定义项目范围的接口,用于@Category注释,并配置 Maven 在构建整个项目时排除它们的注释测试。

应用程序项目中有一个我想分类的测试:

@Category(Integration.class)
@Test
public void testExternalResource() { ... }

那个设定:

我已经建立了一个多模块 Maven 项目:

/container (has a pom with <modules> element)
    /parent (all other modules inherit from its pom. has no source, only pom)
    /util (other modules are depending on it)
    /infra
    /application (depending on infra and util, inherits from parent)

作为一个基础设施怪胎:),我想配置我的整个项目以排除任何模块中的组。因此,在模块中我定义了:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
         <excludedGroups>com.mycompany.test.Integration</excludedGroups>
    </configuration>
</plugin>

我已经将Integration接口放在util模块中(在 中util/src/test/java),供所有模块查看:

package com.mycompany.test;
public interface Integration {}

而且因为它是一个test-jar我已经utilapplication进行了正确的配置。

错误:

跑步时mvn clean install,我得到

[ERROR] Failed to execute goal org.apache.maven.plugins:
    maven-surefire-plugin:2.16:test
    (default-test) on project util: Execution default-test of goal
    org.apache.maven.plugins:maven-surefire-plugin:2.16:test
    failed: There was an error in the forked process
[ERROR] java.lang.RuntimeException:
    Unable to load category: com.mycompany.test.Integration

好吧,当然这个类是不可用的——我已经把它塞进了项目第一个模块的一个测试罐子里。:(

我应该把我的Integration界面放在哪里,以便我的 mvn 配置和源代码可以使用它?

4

1 回答 1

11

创建一个新的 Maven 模块并将接口放在src/main/java/. 确保junit可用作编译时依赖项 ( <scope>compile</scope>) - 您基本上是在构建其他测试可以使用的依赖项。src/test/java因此,帮助其他测试的代码必须像往常一样进入 main,而对此的测试进入.

这一步感觉有点奇怪,但想想你会如何包装junit自己。从. junit_main

当您需要此模块时,将其用作测试依赖项<scope>test</scope>

于 2013-11-14T15:20:01.687 回答