当前位置: 首页 > 知识库问答 >
问题:

OSGi单元测试和包导出

孔扬
2023-03-14
mybundle
  src/java
    mybundle.package1
      ...java
  bnd.bnd
mybundle
  src/java
    mybundle.package1
      ...java
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd

注意附加的'.test'以区分包并避免拆分包问题。

通常,会有一些措施来确保测试类不会最终出现在构建的bundle jar中。

这里添加了一个单独的bundle,name后缀“.test”,这是常规做法。

mybundle
  src/java
    mybundle.package1
      ...java
mybundle.test
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd
mybundle.fragment
  test/java
    mybundle.package1.test
      ...java
  bnd.bnd

这对于第二种选择最为明显,即拥有单独的测试包。测试包中的测试必须导入-打包待测类,而待测包也必须导出-打包所有所述待测类。

因此,显而易见的解决方案是倾向于在bundle源代码中进行单元测试,但问题很快就会出现在非常重要的情况下。您可能希望共享测试代码,例如,您可能将OSGi集成测试放在一个单独的包中。为了共享代码,您最终不得不导出打包测试包,然后当然您也最终在构建的包中使用测试代码!

组织OSGi包/项目进行测试的最佳方式是什么?

共有1个答案

孔逸春
2023-03-14

第三种选择是使用OSGi片段进行单元测试。这确保了测试与要测试的代码共享一个类加载器,因此不需要额外的内部包的包导出。如果需要,测试片段甚至可以导出主包的内部包。该片段将有自己的包导入,因此它可以拉入共享测试代码,而不会污染主包的包导入。

正如上面的注释和更新的原始问题中提到的,使用片段仍然会给您留下一些关于如何处理构建和类路径的问题。如果您是在OSGi容器外运行测试,那么片断的类加载器优势基本上就会消失,可能除了在IDE中引入导入的测试依赖项之外。

如果您是在OSGihtml" target="_blank">容器中运行测试,那么与普通包相比,碎片确实有一些缺点,这可能是一个问题,这取决于您是如何驱动测试的。片段不能声明激活器,因为它们没有独立的生命周期。声明性服务也不能以自然的方式从片段注册,尽管蓝图服务通常可以。

 类似资料:
  • 我如何测试我的OSGI包?我使用的是基于Eclipse Equinox的Kura。我说的是单元测试,而不是集成测试,因为我想在检查导出的服务之前先检查应用程序类和逻辑。 最好的方法是什么? null 我可以使用什么样的工具?朱尼特? 谢谢并致以最良好的问候!

  • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

  • 问题内容: 无论我做什么,sys.exit()都被unittest调用,即使是最琐碎的例子。我无法确定我的安装是否混乱或正在发生什么。 问题答案: 您的示例也在我的安装中退出。我可以通过更改使其执行测试并保留在Python中 至 在Python库参考中可以找到更多信息。

  • 问题内容: 目前,作为大学最后一年项目的一部分,我正在开发一个新的版本控制系统。这个想法是使其具有高度的适应性和可插拔性。 我们正在使用OSGi框架(Equinox实现)来管理我们的插件。我的问题是我找不到测试OSGi捆绑包的简单易用的方法。 当前,我必须使用Maven构建捆绑软件,然后执行测试工具。我正在寻找类似Eclipse的JUnit测试运行程序之类的东西,因为它可以节省大量时间。 有没有一

  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其