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