1

我们正在为我们的 Eclipse RCP 应用程序编写 SWTBot 测试。我们的 RCP 应用程序包括 NatTable 组件并具有启用/禁用透视的授权机制。从 Eclipse 启动时,测试套件运行良好。现在我们正在尝试将它与 Tycho 集成。

这是为运行 SWTBot 测试套件创建的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.test</groupId>
    <artifactId>com.test.demo.client.gui</artifactId>
    <version>6.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>com.tsystem.demo.client.gui.swtbot.test</artifactId>
  <packaging>eclipse-test-plugin</packaging>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <artifactId>tycho-surefire-plugin</artifactId>
        <version>0.20.0</version>
        <configuration>
          <useUIHarness>true</useUIHarness>
          <useUIThread>false</useUIThread>
          <!-- launch our product and application in the tests -->
          <product>com.test.demo.client.gui.ui.product</product>
          <application>com.test.demo.client.gui.ui.application</application>
         </configuration>
      </plugin>
    </plugins>
  </build>
</project>

当我们执行 Tycho 构建以启动 SWTBot 测试套件时,我们遇到以下错误:

[错误] 无法在项目 com.tsystem.rvs.client.gui.swtbot.test 上执行目标 org.eclipse.tycho:tycho-surefire-plugin:0.20.0:test (default-test):发生意外错误(返回码 -1)。有关详细信息,请参阅日志。-> [帮助 1]

我的第一个问题是 Tycho 如何在不创建产品的情况下对我们的 RCP 应用程序执行测试?我尝试了几个示例,在这些示例中,测试套件是在创建产品之前执行的。我们有启动屏幕的自定义配置,服务器的登录机制,所以启动 swtbot 测试套件是否需要额外的配置。我们尝试以一种视角和视图启动 RCP 应用程序,它与 tycho 配合良好,但在我们的案例中,tycho 无法启动应用程序。在目标/数据和配置下也没有创建日志文件。

如果产品是在执行 SWTBot 测试套件后创建的,有人可以解释 Tycho 从哪里获取插件来启动应用程序吗?

4

1 回答 1

3

如果产品是在执行 SWTBot 测试套件之后创建的,有人可以解释 Tycho 从哪里获取插件来启动应用程序吗?

这是一个很好的问题,它正在接近您问题的根本原因。

但首先我们需要澄清“产品”一词。不幸的是,它可能意味着两种不同的东西:“产品”可能意味着org.eclipse.core.runtime.products扩展点的扩展,或者产品配置文件 ( *.product)。对于测试,只有产品扩展是相关的。

同样对于应用程序,有扩展点org.eclipse.core.runtime.applications

因此,为了让您的测试能够使用您的产品和应用程序,测试运行时需要包含定义产品和应用程序扩展的插件。(扩展点扩展在plugin.xml插件中定义。)在 Eclipse 中,这通常会自动发生,因为 Eclipse 在测试运行时中包含工作区中的所有插件。然而,Tycho - 没有工作空间的概念 - 测试运行时仅包含测试插件及其所有传递依赖项。您的测试插件似乎不依赖于定义产品和应用程序的插件,因此这就是测试执行失败的原因。(顺便说一句,/target/work/configuration/config.ini列出了 Tycho 创建的测试运行时的所有插件。)

因此,要将带有产品和应用程序扩展的插件添加到测试运行时,您可以

  • 添加一个依赖项,例如Require-Bundle在测试插件的清单中添加它们,
  • 或按此处extraRequirements所述配置测试插件项目。

有关错误消息的更多详细信息:“返回代码 -1”错误是由配置<application>在测试运行时中未定义的一个引起的。

配置未知数<product>不会阻止测试启动。在这种情况下,唯一可见的效果可能是“找不到产品 xxx.product.id”日志条目/target/work/data/.metadata/.log

PS:从 Tycho 0.22.0 开始,如果配置的应用程序在测试运行时未定义,则会出现更明确的错误消息:

在测试运行时找不到应用程序“xyz”。确保测试运行时包含定义此应用程序的包。

于 2014-11-14T15:24:15.570 回答