2016-03-04 109 views
0

我正在開發使用Pax Exam 4.8,junit4,JBoss Fuse作爲OSGi容器的一些OSGi bundle的集成測試。假設標準的Maven設置。如何訪問Pax Exam考試測試套件中的資源?

容器啓動,我的包已部署並正確啓動。

現在在我的測試代碼中,我需要加載資源並將其內容寫入文件。 如果我理解正確,單元測試會自動部署爲測試探針包。

@RunWith(PaxExam.class) 
@ExamReactorStrategy(PerMethod.class) 
public class ExampleTest { 

    @javax.inject.Inject 
    BundleContext bundleContext; 

    @Configuration 
    public Option[] config() throws Exception { 
     // container setup 
    } 

    @Test 
    public void testThatApplicationProcessesThisFile() { 
     InputStream is1 = getClass().getResourceAsStream("myResource"); // returns null 

     Bundle probeBundle = bundleContext.getBundle("local"); 
     InputStream is2 = probeBundle.getResource("myResource").openStream(); 
     // getResource() returns null 

     // write the resource as a file 
    } 

} 

如何在Pax Exam考試中加載資源?如何檢查資源是否包含在測試探針包中?

回答

1

通過熱雷米的prosed溶液工作正常:
this.getClass().getClassLoader().getResourceAsStream("/myresource");

我的問題是在設置中。我把我的資源放在src/main/resources文件夾中。在構建探測器包時,Pax考試只包含src/test/resources文件夾中的資源。

將文件移動到正確的文件夾後,可以按照通常的方式將它們作爲資源訪問。

1

你試過一個「簡單」的getResourceAsStream()嗎?這應該工作:

this.getClass().getClassLoader().getResourceAsStream("/myresource"); 

在我的集成測試的一箇舊的一部分,我用下面的函數來獲取「概率」捆綁(但說實話,我不認爲這是現在有必要):

private Bundle getProbeBundle() { 
    for (Bundle bundle : bundleContext.getBundles()) { 
     if (bundle.getSymbolicName().startsWith("PAXEXAM-PROBE-")) { 
      return bundle; 
     } 
    } 
    return null; 
} 

然後:

getProbeBundle().getResource(from).openStream()