如何在 pax 考试中启动和关闭第二个 OSGi 容器

How to start and shut down a second OSGi container in pax exam

我正在使用 pax 考试测试远程服务。

为此,我需要启动两个容器。一个本地 运行 我的测试调用消费者,第二个 运行 服务 Aries RSA 和 zookeeper。

我设法通过在@Configuration 方法中调用它来启动外部容器。这似乎不属于那里,但这是我发现的唯一一个在 OSGi 之外执行代码的地方。

https://github.com/apache/aries-rsa/blob/master/itests/felix/src/test/java/org/apache/aries/rsa/itests/felix/tcp/TestRoundTrip.java#L47-L51

现在我需要第二个挂钩,当测试关闭时调用它,然后我可以关闭容器。 @After 或 @AfterClass 在 OSGi 中似乎不能像 运行 一样工作。

我也很高兴有一种更简洁的方式来启动外部容器,因为我觉得将它添加到 @Configuration 中并不合适。

我现在找到了解决方案,但我仍然希望有一些开箱即用的东西。

我创建了一个新的 Pax 跑步者 TwoContainerPaxExam。它寻找第二个用@ServerConfiguration 注释的配置,在测试前启动它并在测试后关闭它。

所以我的测试现在看起来像这样 TestRoundTrip。如果没有开箱即用的东西,我会尝试将此解决方案放入 pax 考试中。