3

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

my.plugin
  src/      
  fixtures/ 
    p1/     
    p2/

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2013-02-26T22:00:25.633 回答
1

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

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

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

于 2013-02-26T10:23:56.370 回答