4

我目前正在研究如何最好地测试我们打算在 Apache Karaf 上运行的 OSGi 应用程序。显而易见的选择是使用labs-paxexam-karaf进行的 Pax 考试(有关教程,请参见http://iocanel.blogspot.com/2012/01/advanced-integration-testing-with-pax.html)。但是,我担心性能(因为 Pax Exam 显然为每种测试方法启动了一个新框架)。我还发现Arquillian 有一些 OSGi 支持,尽管这不是它的主要关注点。JUnit4osgi 不是一个选项,因为它只支持 JUnit 3。

对于不熟悉这两种框架的人来说,从哪个开始更好?有哪些权衡?

4

3 回答 3

3

基于Reactor Strategies Pax-Exam 可以在同一个 OSGi 容器中运行所有测试方法。

于 2012-04-18T11:36:50.267 回答
3

如果您需要适当的 OSGi 支持,为什么还要使用 Arquillian?=)

在查看 PaxExam 时,请确保文档参考 PaxExam 2 - v 1 和 2 之间存在很大差异。

PaxExam 需要一段时间才能掌握,但在此过程中您会学到很多关于 OSGi 的知识(这绝对是一件好事,但仍然会受到伤害)。

与@Dmytro 的回答并行,测试容器包括一个本机容器,它与 junit 测试使用相同的 VM 运行 - 这意味着您可以在 Eclipse 中使用调试启动。这特别适用于 org.eclipse.m2e:lifecycle-mapping maven eclipse 插件和 org.ops4j.pax.exam:maven-paxexam-plugin。这种方法很棒,完整的 IDE 集成。

PaxExam 文档有点稀疏,但有一些很好的示例(请参阅提供交互式 shell 的带有 main 方法的 Native 启动器)和wiki doc。如果您遇到问题,邮件列表人员 (general@lists.ops4j.org) 会非常有帮助。

另一种选择是查看Karaf 的 paxexam,它非常流畅且易于启动和运行 Karaf 实例(features.xml 等)。

就我个人而言,我只使用 PaxExam2,因为我不希望对框架提供者有明确的依赖(完全不反对 Karaf,它很糟糕)。

于 2012-04-19T12:55:04.467 回答
2

Pax Exam 2.x(在 Pax 3.0 中别名为 PerClass)的 EagerSingleStagedReactorFactory 允许您在同一个 OSGi 容器中运行给定类的所有测试方法。

通过 Pax Exam 3.0.0.M1 中引入的 PerSuite 策略,您的套件的所有测试类都在同一个容器中运行。

顺便说一句,Pax Exam 3.0 除了支持 OSGi 外,还支持 Java EE 和 CDI 容器,因此与 Arquillian 的功能更加相似,只有 Pax Exam 来自另一端。

使用 Pax Exam,无需以 ShrinkWrap 样式组装部署,它们是从类路径自动构建的。此外,您可以运行具有共享配置的测试类套件。

于 2012-06-02T20:47:44.247 回答