pax-exam:是在捆绑中运行的测试吗?

时间:2014-11-15 14:08:13

标签: maven osgi pax-exam

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

所以,我已经为这种情况添加了pax-exam。

我将在此末尾粘贴一个单元测试shell。我的@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() {

    }
}

2 个答案:

答案 0 :(得分:2)

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

如果要确保导入这些包,可以改变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;
}

答案 1 :(得分:0)

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

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

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

pax.exam.osgi.unresolved.fail = true