maven跨项目集成

时间:2012-08-01 18:57:41

标签: maven integration-testing

我是maven的新手,我在缠绕这个问题时遇到了一些麻烦。

我有一堆捆绑作为项目的集成测试。我希望能够随意将这些测试应用于任何其他项目。

如何使用POM将集成测试项目代码放入另一个项目并在集成测试阶段执行?

如果我将其作为依赖项,并且Integration测试项目的POM指定了阶段集成测试。原始项目的构建周期是否继续,直到达到集成测试,然后依赖项目在该阶段接管?

抱歉,我觉得我在这里打死马。您的回复非常有助于我了解最新情况以及我需要做些什么。 我的问题是,即使我的测试代码编译并作为依赖项添加为test,因为某些原因它不会执行或检测测试。 该测试名为appTest,上面有JUnit 4.x标签,我无法弄清楚它为什么不起作用。

2 个答案:

答案 0 :(得分:2)

您可以在配置maven-jar-plugin并运行 mvn install 的隔离工件中发布测试:

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

稍后从您要执行测试的其他项目中导入依赖项:

<dependency>
 <groupId>project.with.tests.groupid</groupId>
 <artifactId>projectwithtestsartifatid</artifactId>
 <version>1.0</version>
 <type>test-jar</type>
 <scope>test</scope>
</dependency>

无论如何,surefire或failsafe插件只在 target / test-classes 文件夹中查找测试,而不是在类路径的jar中查找。肯定有一个open issue,没有分配固定版本(至少目前是这样)。

解决方法是使用依赖项插件来解压缩目标/测试类中的测试类,但这可能会污染发布版本:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-dependency-plugin</artifactId>
 <executions>
  <execution>
   <id>resource-dependencies</id>
   <phase>process-test-classes</phase>
   <goals>
    <goal>unpack-dependencies</goal>
   </goals>
   <configuration>
    <includeTypes>test-jar</includeTypes>
    <outputDirectory>${project.build.directory}/test-classes</outputDirectory>
   </configuration>
  </execution>
 </executions>
</plugin>

答案 1 :(得分:1)

最佳选择是将集成测试代码提取到单独的模块,然后您必须运行mvn install将二进制文件发布到本地存储库,以便在构建另一个项目时可见,或者只需mvn compile如果这些测试将用于模块与父模块具有相同版本的多模块项目中,则需要。 要在另一个项目或模块中使用,它应该在依赖性部分中声明,其中包含像junit library这样的测试范围。

如果上面的选项不合适,可以尝试使用测试分类器(文件名后缀)准备附加的jar:

<build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>test-jar</id>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>com/thenewmotion/test/**/*.*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

并且除了测试范围之外还应该添加test-jar类型或测试分类器:

<dependency>
    <groupId>com.thenewmotion</groupId>
    <artifactId>msp-solveconnector</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>