运行 针对多个目标平台的集成测试

Run Integration Tests Against Multiple Target Platforms

我目前的任务是将我们的一个应用程序从 Eclipse 3.7 和 4.5 切换。可悲的是,没有人预料到新框架有多糟糕,这就是为什么其他应用程序现在将保持在 3.7。棘手的部分来了:为了加快bug查找过程,我想对我们的常用插件进行4.5的测试(当然他们仍然需要针对3.7进行测试)。

This thread 建议在 maven-invoker-plugin 的帮助下可能有可能,但它已有 2 年历史了,这是一个非常常见的用例,所以现在可能会有更好的东西。

我找不到关于如何使 maven-invoker-plugin 与第谷一起工作的任何信息。而且 tycho-surefire-plugin 似乎没有任何更改目标平台的选项。

以防万一,我说的是这个目标平台(在文档之外似乎不受支持/不使用):

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <configuration>
        <resolver>p2</resolver>
        <target>
            <artifact>
                <groupId>${project.groupId}</groupId>
                <artifactId>org.acme.project</artifactId>
                <version>${project.version}</version>
                <classifier>platform</classifier>
            </artifact>
        </target>
    </configuration>
</plugin>

那么如何针对多个目标平台测试我的集成测试?

您是否需要在单个构建期间执行此操作,即在单个反应器中执行此操作?如果没有,您可以根据传递给 Maven 的系统 属性 简单地切换目标平台,例如,通过 Jenkins/Hudson matrix build:

<target>
  <artifact>
    <groupId>${project.groupId}</groupId>
    <artifactId>${targetPlatform}</artifactId>
    <version>${project.version}</version>
    <classifier>platform</classifier>
  </artifact>
</target>

请记住在 project/properties 下为您的 targetPlatform 属性 配置一个默认值,这样没有设置 -DtargetPlatform=... 的构建就不会失败。

(在 Eclipse Code Recommenders,我们使用此设置定期 test against 6 different Eclipse releases。)

我还找到了 运行 在同一个反应器中进行测试的方法。

我在没有所有测试的情况下创建了测试片段的副本 类 并通过 target-platform-configuration 添加了 E4 目标平台。然后我使用这段代码将 类 和 fragment.xml 复制到新模块:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>copy-classes</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/it-classes</outputDirectory>
                <resources>
                    <resource>
                        <directory>../${original-test-project}/src</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
        <execution>
            <id>copy-fragment</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/</outputDirectory>
                <resources>
                    <resource>
                        <directory>../${original-test-project}/</directory>
                        <includes>
                            <include>fragment.xml</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

最后 build.properties 必须有行 source.. = target/it-classes/ 以便 Maven 构建可以编译复制的 类 和 运行 他们正常。