【问题标题】:OSGi test fragment dependencies with Eclipse-ExtensibleAPIOSGi 测试片段依赖与 Eclipse-ExtensibleAPI
【发布时间】:2014-04-29 19:55:55
【问题描述】:

如果我理解正确,建议在 OSGi 中进行白盒测试的方法是将(测试)片段添加到需要测试的包中。我有以下设置:

  • 将“com.bundleA”与包“com.bundleA.foo”捆绑在一起
  • 使用包“com.bundleA.foo”和“com.bundleA.utils”分段“com.bundleA.tests”
  • 将“com.bundleB”与包“com.bundleB.bar”捆绑在一起
  • 片段“com.bundleB.tests”与包“com.bundleB.bar”
  • “com.bundleA”导出“com.bundleA.foo”
  • “com.bundleA.tests”导出“com.bundleA.utils”
  • “com.bundleB”导入包“com.bundleA.foo”

我的用例如下:我希望“com.bundleB.tests”导入“com.bundleA.utils”。在 OSGi 中,从哪里导出包并不重要。然而,Eclipse PDE 需要在 'com.bundleA' 中设置 'Eclipse-ExtensibleAPI=true' 以使其了解 'com.bundleA.tests' 可以导出其他包。但是,在编译时,“com.bundleB”现在可以从测试片段中的“com.bundleA.foo”访问类!这是不希望的,因为片段不会被部署,因此会出现运行时错误。

在这种情况下,最佳做法是什么?

【问题讨论】:

    标签: java dependencies osgi eclipse-rcp


    【解决方案1】:

    问题在于您的用例:您希望 com.bundleB.tests 导入 com.bundleA.utils,但 com.bundleA.utils 是 com.bundleA 的片段。为单元测试创​​建片段是可以的,但当这些片段的一部分必须由其他捆绑包中的其他单元测试使用时则不行。 您应该创建一个仅包含必须共享的 utils 类 (com.bundleC) 的包,该类仅由 unittest 片段使用并包含 com.bundleA.utils 包。

    【讨论】:

    • 虽然我理解您的回答,但“com.bundleC”将无法访问未导出的包,而这对于我的情况是必要的。此外,如果 'com.bundleA.tests' 依赖于 'com.bundleC' (因为 testutils 已经移到那里,它会依赖),就会出现循环依赖。将“com.bundleC”作为片段将重新确定测试件可从生产代码访问的问题。
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2015-10-03
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多