使用 Pax Exam 进行集成测试的动态参考包
Dynamically reference bundles for integration test with Pax Exam
我已经创建了一个 OSGi example project 并希望改进集成测试所需的捆绑包的配置。
现在 bundle 是通过文件名静态引用的,利用 CoreOptions.bundle("reference:file:" + <path>)
,因此问题是测试将在未来某个时间失败,当 jars 的名称发生变化时(由于版本例如改变)。
是否有更好的方法来部署所需的依赖项?也许使用符号名称,或 group/artifact id?
@RunWith(PaxExam.class)
public class ServiceTestCase {
@Inject
private Service service;
@Configuration
public Option[] config() {
return CoreOptions.options(
/* needed for ds annotations */
CoreOptions.mavenBundle("org.apache.felix", "org.apache.felix.scr", "1.8.2"),
CoreOptions.bundle("reference:file:../service/target/service-0.0.1-SNAPSHOT.jar"),
CoreOptions.bundle("reference:file:../service.impl/target/service.impl-0.0.1-SNAPSHOT.jar"),
CoreOptions.junitBundles());
}
@Test
public void testInjections() {
Assert.assertNotNull(service);
}
}
的缩写
您的项目是一个 Maven 项目并捆绑了 Maven 工件。最好使用 mavenBundle
引用:
- 在测试的 pom 中引用这些依赖项
使用depends-maven-plugin
生成一个属性文件,其中包含依赖的版本:
<plugin>
<groupId>org.apache.servicemix.tooling</groupId>
<artifactId>depends-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>generate-depends-file</id>
<phase>generate-resources</phase>
<goals>
<goal>generate-depends-file</goal>
</goals>
</execution>
</executions>
</plugin>
使用 mavenBundle
参考:
mavenBundle().groupId("org.beyene.mode")
.artifactId("service.consumer").versionAsInProject()
我已经创建了一个 OSGi example project 并希望改进集成测试所需的捆绑包的配置。
现在 bundle 是通过文件名静态引用的,利用 CoreOptions.bundle("reference:file:" + <path>)
,因此问题是测试将在未来某个时间失败,当 jars 的名称发生变化时(由于版本例如改变)。
是否有更好的方法来部署所需的依赖项?也许使用符号名称,或 group/artifact id?
@RunWith(PaxExam.class)
public class ServiceTestCase {
@Inject
private Service service;
@Configuration
public Option[] config() {
return CoreOptions.options(
/* needed for ds annotations */
CoreOptions.mavenBundle("org.apache.felix", "org.apache.felix.scr", "1.8.2"),
CoreOptions.bundle("reference:file:../service/target/service-0.0.1-SNAPSHOT.jar"),
CoreOptions.bundle("reference:file:../service.impl/target/service.impl-0.0.1-SNAPSHOT.jar"),
CoreOptions.junitBundles());
}
@Test
public void testInjections() {
Assert.assertNotNull(service);
}
}
的缩写
您的项目是一个 Maven 项目并捆绑了 Maven 工件。最好使用 mavenBundle
引用:
- 在测试的 pom 中引用这些依赖项
使用
depends-maven-plugin
生成一个属性文件,其中包含依赖的版本:<plugin> <groupId>org.apache.servicemix.tooling</groupId> <artifactId>depends-maven-plugin</artifactId> <version>1.2</version> <executions> <execution> <id>generate-depends-file</id> <phase>generate-resources</phase> <goals> <goal>generate-depends-file</goal> </goals> </execution> </executions> </plugin>
使用
mavenBundle
参考:mavenBundle().groupId("org.beyene.mode") .artifactId("service.consumer").versionAsInProject()