【问题标题】:Organizing fixture preferences for plugin tests为插件测试组织夹具首选项
【发布时间】:2013-02-23 09:29:21
【问题描述】:

为了测试一个 Eclipse 应用程序,我编写了一个测试套件,它通过搜索存储在给定包的子文件夹中的测试项目,在运行时动态发现可用的测试用例,如下所示:

my.plugin
  src/      
  fixtures/ 
    p1/     
    p2/

每个夹具都是一个成熟的 Eclipse 项目。在运行时,我的套件发现 p1p2 并为每个创建一个测试。然后每个测试在设置时将其夹具导入工作区,然后运行实际测试代码并在拆卸时删除夹具。到目前为止,这很好用,我只是转储另一个夹具来添加新测试。无需为新测试编写更多代码。耶!

我现在的问题是,所有这些都是针对具有默认首选项的干净工作区运行的。如果我的一些灯具需要特定的偏好设置才能有用怎么办?我需要以某种方式为夹具提供这些自定义首选项,并确保将它们加载到夹具的测试设置中,并在拆卸时恢复默认的工作台首选项。在 Eclipse 中执行此操作的最佳方法是什么?

【问题讨论】:

    标签: eclipse junit eclipse-plugin


    【解决方案1】:

    我不确定这是否是最好的解决方案,但我会这样做:

    让用户选择(在设置中)是否应该在干净的工作区中运行测试。如果没有,只需使用当前的,这样用户就可以在那里应用设置。我认为这是合理的,因为测试运行通常与要测试的实际项目在同一个工作区中完成。

    您可以通过调用ResourcesPlugin.getWorkspace()访问当前工作区。

    【讨论】:

      【解决方案2】:

      如果您只想使用项目设置,那么解决方案很简单。只需在每个项目中创建一个 .settings 文件夹并填充相应的org.foo.bundle.name.prefs 文件即可。

      如果您想要进行工作区设置,事情会变得更加复杂。我建议查看org.osgi.service.prefs.Preferencesorg.eclipse.core.runtime.preferences.IScopeContext API。 Eclipse 使用分层方法来提供首选项。您可以设置范围的层次结构,例如默认、工作区和项目范围。每个作用域都有一个或多个节点,每个节点都有一组键值对。

      例如,您通常会查找首选项,例如特定项目中的源代码级编译器属性。以下是它所经历的步骤:

      1. 创建范围层次结构,通常根是默认的,然后是工作区,然后是项目。
      2. 从底部范围获取org.eclipse.jdt.core 节点。
      3. 向节点询问与键关联的值。
      4. 如果该节点有值,则返回,否则从下一个作用域转到该节点。
      5. 如果没有一个作用域包含该键,则返回一些默认值。

      简单地完成这项工作而不使用内部 Eclipse API 的最佳选择是使用 org.eclipse.ui.texteditor.ChainedPreferenceStore 实例。您将创建要从中获取首选项的 IPreferenceStore 的查找层次结构,其中之一将是您创建的自定义 IPreferenceStore,它将为您的项目提供额外的首选项。

      现在,您当然需要确保所有需要这些自定义首选项的地方都能够传入自定义的 ChainedPreferenceStore。

      【讨论】:

      • org.foo.bundle.name.prefs 文件是由 ProjectScope 创建的吗?
      • 项目范围在 .settimgs 中创建文件。 InstanceScope 在 workspace/.metadata/.plugings/org.eclipse.core.runtime/*.prefs 中创建文件
      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      相关资源
      最近更新 更多