2

我是 Maven 的新手,我在解决这个问题时遇到了一些麻烦。

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

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

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

对不起,我觉得我在这里打了一匹死马。您的回答非常有助于让我了解正在发生的事情以及我需要做什么。我的问题是,即使我的测试代码编译并作为依赖项添加,测试作为范围由于某种原因它不会执行或检测到测试。该测试名为 appTest 并带有 JUnit 4.x 标记,我无法弄清楚它为什么不起作用。

4

2 回答 2

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文件夹中寻找测试,而不是在 classpath 的 jar 中。在surefire中存在一个分配的固定版本(至少目前是这样)。

一种解决方法是使用依赖插件来解压target/test-classes中的测试类,但这可能会污染版本:

<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>
于 2012-10-24T13:39:40.127 回答
1

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

如果上述选项不合适,您可以尝试使用测试分类器(文件名后缀)准备附加的 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>
于 2012-08-01T19:16:20.583 回答