2016-03-05 60 views
0

我创建了一个OSGi example project,并且希望改进集成测试所需的包的提供。动态引用包与Pax集成测试考试

眼下束静态地利用CoreOptions.bundle("reference:file:" + <path>)按文件名引用,问题因而是测试将在未来一段时间内失效,当罐子的名称更改(因换版为例)。

有没有更好的方式来部署所需的依赖关系?也许使用符号名称或组/工件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); 
    } 
} 

ServiceTestCase.java

回答

2

您的项目缩短的版本是Maven项目和捆绑Maven构件。这是更好然后使用mavenBundle引用:

  1. 参考这些依赖于你的测试
  2. 使用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> 
    


  3. 使用a mavenBundle参考:

    mavenBundle().groupId("org.beyene.mode") 
        .artifactId("service.consumer").versionAsInProject() 
    
+0

Thx为您的答案。我应该在测试pom中使用什么范围的依赖关系?提供? – mike

+1

测试范围,但说实话,没关系。考试将提供一个新的容器,测试的类路径将不会被使用。 –

+0

谢谢。从命令行一切正常。不过,Eclipse抱怨道:'插件执行不在生命周期配置中:org.apache.servicemix.tooling:depends-maven-plugin:1.2:generate-depends-file(执行:generate-depends-file,phase:generate-resources )'你知道吗。关于那个? – mike