运行 针对多个目标平台的集成测试
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 构建可以编译复制的 类 和 运行 他们正常。
我目前的任务是将我们的一个应用程序从 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 构建可以编译复制的 类 和 运行 他们正常。