Eclipse 为插件测试组织夹具首选项

Eclipse 为插件测试组织夹具首选项,eclipse,junit,eclipse-plugin,Eclipse,Junit,Eclipse Plugin,为了测试eclipse应用程序,我编写了一个测试套件,通过搜索存储在给定包的子文件夹中的测试项目,在运行时动态发现可用的测试用例,如下所示: my.plugin src/ fixtures/ p1/ p2/ 每个fixture都是一个成熟的eclipse项目。在运行时,我的套件会发现p1和p2,并为它们创建一个测试。然后每个测试在安装时将其夹具导入工作空间,然后运行实际测试代码并在拆卸时删除夹具。到目前为止,这非常有效,我只是转储了另一个fixt

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

my.plugin
  src/      
  fixtures/ 
    p1/     
    p2/
每个fixture都是一个成熟的eclipse项目。在运行时,我的套件会发现
p1
p2
,并为它们创建一个测试。然后每个测试在安装时将其夹具导入工作空间,然后运行实际测试代码并在拆卸时删除夹具。到目前为止,这非常有效,我只是转储了另一个fixture来添加一个新的测试。无需为新测试编写更多代码。耶


我现在的问题是,所有这些都运行在一个带有默认首选项的干净工作区上。如果我的某些装置需要特定的首选项设置才能发挥作用,该怎么办?我需要在夹具中提供这些自定义首选项,并确保它们加载到夹具的测试设置中,并在拆卸时恢复默认的工作台首选项。在eclipse中执行此操作的最佳方法是什么?

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

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


通过调用
ResourcesPlugin.getWorkspace()

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

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

例如,您通常会查找一个首选项,比如特定项目中的源代码级编译器属性。以下是该过程的步骤:

  • 创建范围层次结构,通常根是默认的,然后是工作区,然后是项目
  • 从底部范围获取
    org.eclipse.jdt.core
    节点
  • 向节点请求与键关联的值
  • 如果此节点具有值,则返回该值,否则从下一个作用域转到该节点
  • 如果所有作用域都不包含键,则返回一些默认值
  • 简单地完成这项工作而不使用内部EclipseAPI的最佳选择是使用
    org.Eclipse.ui.texteditor.ChainedPreferenceStore
    实例。您将创建要从中获取首选项的IPreferenceStores的查找层次结构,其中一个将是您创建的自定义IPreferenceStore,它将为您的项目提供额外的首选项


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

    org.foo.bundle.name.prefs文件是由ProjectScope创建的?ProjectScope在.settimgs中创建文件。InstanceScope在workspace/.metadata/.plugings/org.eclipse.core.runtime/*.prefs中创建文件