我目前正在研究如何最好地测试我们打算在Apache Karaf上运行的OSGi应用程序。显而易见的选择是使用labs-paxexam-karaf进行Pax考试(有关教程,请参阅http://iocanel.blogspot.com/2012/01/advanced-integration-testing-with-pax.html)。但是,我担心性能(因为Pax Exam显然为每种测试方法启动了一个新的框架)。我也发现Arquillian has some OSGi support,虽然这不是它的主要焦点。 JUnit4osgi不是一个选项,因为它只支持JUnit 3。
对于不熟悉这两种框架的人,最好从哪个开始?有什么权衡?
答案 0 :(得分:3)
基于Reactor Strategies Pax-Exam可以在同一个OSGi容器中运行所有测试方法。
答案 1 :(得分:3)
如果您正在使用适当的OSGi支持,为什么要使用Arquillian? =)
在查看PaxExam时,请确保文档引用PaxExam 2 - v 1和2之间存在很大差异。
PaxExam需要一段时间才能掌握,但是你会在这个过程中学到很多关于OSGi的东西(绝对是一件好事,但仍然会受到伤害)。
与@ Dmytro的答案并行,Test Containers包含一个Native容器,它与junit测试使用相同的VM运行 - 这意味着您可以在Eclipse中使用debug启动。这对org.eclipse.m2e:lifecycle-mapping maven eclipse插件和org.ops4j.pax.exam:maven-paxexam-plugin特别有效。这种方法非常棒,完全集成了IDE。
PaxExam文档有点稀疏,但有一些good examples(请参阅带有提供交互式shell的main方法的Native启动程序)和wiki doc。如果您遇到邮件列表,那么人们(general@lists.ops4j.org)会非常有帮助。
另一种选择是查看Karaf's paxexam,非常灵活且易于启动并运行Karaf实例(features.xml等)。
就个人而言,我只是使用PaxExam2,因为我更喜欢没有对框架提供程序的明确依赖(根本没有反对Karaf,它摇滚)。
答案 2 :(得分:2)
Pax Exam 2.x的EagerSingleStagedReactorFactory(别名为Pax 3.0中的PerClass)允许您在同一个OSGi容器中运行给定类的所有测试方法。
在Pax Exam 3.0.0.M1中引入了PerSuite策略,套件的所有测试类都在同一个容器中运行。
顺便说一下,除了OSGi之外,Pax Exam 3.0还支持Java EE和CDI容器,因此与Arquillian的功能相似性更高,只有Pax Exam来自另一端。
使用Pax Exam,无需以ShrinkWrap样式组装部署,它们是从类路径自动构建的。此外,您可以使用共享配置运行测试类套件。