【问题标题】:pax-exam: are the tests running inside of a bundle?pax-exam:测试是否在捆绑包中运行?
【发布时间】:2015-01-12 19:54:15
【问题描述】:

我有一个 Maven 项目,它构建了一个非常简单的 OSGi 包。无活化剂;它唯一的工作就是为 OSGi 项目提供一些共享代码。我想测试我是否已正确设置和嵌入所有依赖项。

所以,我在这种情况下添加了 pax-exam。

我将在最后粘贴一个单元测试外壳。我的 @Test 方法实际上是否在一个包中运行,而该包又取决于我的项目中构建的包?

@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class CommonBundleTest {

    @Configuration
    public Option[] config() {

        return options(
                // this is the current project's result artifact
                mavenBundle("com.basistech.osgi", "rosette-common-java-lib"),
                junitBundles()
        );
    }

    @Test
    public void atest() {

    }
}

【问题讨论】:

    标签: maven osgi pax-exam


    【解决方案1】:

    Pax Exam 即时创建的所谓探测包包含 src/test/java 文件夹中包含您的测试类的所有类。探针包清单具有 Dynamic-ImportPackage: * 标头,因此通常不需要通过探针构建器添加显式导入。

    您的测试所需的任何捆绑包都必须通过 @COnfiguration 方法中的配置选项进行配置。

    如果您希望您的测试在捆绑包未解析时立即失败,您可以设置一个配置属性:

    pax.exam.osgi.unresolved.fail = true
    

    【讨论】:

      【解决方案2】:

      测试是否在包内运行:是 Pax Exam 为单元测试本身创建了一个 TinyBundle。但它不会对 config 方法中声明的任何包添加额外的依赖项。

      如果您想确保导入这些包,您可以更改 TinyBundle 的构建方式。

      @ProbeBuilder
      public TestProbeBuilder probeConfiguration(TestProbeBuilder probe) {
          // makes sure the generated Test-Bundle contains this import!
          probe.setHeader(Constants.IMPORT_PACKAGE, "*,your.extra.package");
          return probe;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-06-19
        • 2012-04-29
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        相关资源
        最近更新 更多