组织插件测试的夹具首选项

时间:2013-02-23 09:29:22

标签: eclipse junit eclipse-plugin

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

my.plugin
  src/      
  fixtures/ 
    p1/     
    p2/

每个灯具都是一个完全成熟的日食项目。在运行时,我的套件会发现p1p2并为每个创建一个测试。然后每个测试在安装时将其夹具导入工作空间,然后运行实际测试代码并在拆卸时删除夹具。到目前为止这很好用,我只是转移另一个夹具来添加一个新的测试。无需为新测试编写更多代码。好极了!

现在我的问题是所有这些都是针对具有默认首选项的干净工作区运行的。如果我的某些灯具需要特定的偏好设置才能有用呢?我不知何故需要为夹具提供这些自定义首选项,并确保它们在夹具的测试设置中加载并恢复拆卸时的默认工作台首选项。在eclipse中这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

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

您可以致电ResourcesPlugin.getWorkspace()

来访问当前工作区

答案 1 :(得分:1)

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

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

因此,例如,您通常会查找首选项,例如特定项目中的源级编译器属性。以下是这些步骤:

  1. 创建范围层次结构,通常是root是default,然后是workspace,然后是项目。
  2. 从底部范围获取org.eclipse.jdt.core节点。
  3. 向节点询问与密钥相关联的值。
  4. 如果此节点有值,则返回它,否则从下一个范围转到节点。
  5. 如果没有任何范围包含密钥,则返回一些默认值。
  6. 简单地完成这项工作并且不使用内部Eclipse API的最佳选择是使用org.eclipse.ui.texteditor.ChainedPreferenceStore实例。您将创建要从中获取首选项的IPreferenceStores的查找层次结构,其中一个将是您创建的自定义IPreferenceStore,它将为您的项目提供额外的首选项。

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