我想定义项目范围的接口,用于@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)
作为一个基础设施狂热者:),我想配置我的整个项目以排除任何模块中的组。所以,在 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 {}
因为 util 和应用都是test-jar
,I've made the right configuration。
运行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配置和源代码可用?
答案 0 :(得分:11)
创建一个新的Maven模块并将界面置于src/main/java/
下。确保junit
可用作编译时依赖项(<scope>compile</scope>
) - 您基本上构建了其他测试可以使用的依赖项。因此,有助于其他测试的代码必须进入main,而对此的测试将照常进入src/test/java
。
这一步感觉有点奇怪,但想想如何打包junit
本身。从junit
的角度来看,它只是一个普通的Java库,所以它的所有代码都进入main
。
当您需要此模块时,请将其用作<scope>test</scope>