0

我有一个 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() {

    }
}
4

2 回答 2

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;
}
于 2014-11-15T18:50:50.817 回答
0

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

测试所需的任何包都必须由@COnfiguration方法中的配置选项提供。

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

pax.exam.osgi.unresolved.fail = true
于 2014-11-16T13:38:49.333 回答