2014-06-25 113 views
7

在測試的時候是否有一種方法將屬性注入Java清單(或者注入整個清單)?Java單元測試集Manifest屬性

我們正在讀取清單(版本號)中的值,該清單在測試時間解析爲null。

到目前爲止,我們已經嘗試在我們的測試根目錄中放置一個硬編碼的MANIFEST.MF文件,但它不起作用。

這是我們用來閱讀清單代碼:

private Attributes getManifest() { 
    URLClassLoader cl = (URLClassLoader) getClass().getClassLoader(); 
    Manifest manifest; 
    try { 
     URL url = cl.findResource("META-INF/MANIFEST.MF"); 
     manifest = new Manifest(url.openStream()); 
    } catch (IOException e) { 
     throw Throwables.propagate(e); 
    } 
    return manifest.getMainAttributes(); 
} 

作爲最後的手段,我們將包裹,上面寫着清單的功能和嘲笑,但這些都是集成測試,並且都應該是黑盒子(即,我們避免嘲笑)。

其他信息:Java 7,在IntelliJ或Gradle中運行Junit測試。

+0

所以,當你運行一個測試,其中MANIFEST.MF所在,到底是什麼? –

+0

當測試是獨立的Java應用程序而不是運行在容器中的應用程序時,爲什麼要在運行測試(可能是JUnit?)時修改java清單? – czpona

回答

2

您可能想試試jcabi-manifests庫:http://manifests.jcabi.com/。它是Java清單設施的抽象,允許您追加新數據,甚至可以在運行時組合多個清單。

典型的用法是訪問Manifests.DEFAULT單例,它在運行時保存應用程序的MANIFEST.MF條目。這是可能的追加到該對象:

Manifests.DEFAULT.put("Test-Property", "Hello"); 

Manifests的Javadoc:http://manifests.jcabi.com/apidocs-1.1/com/jcabi/manifests/Manifests.html

現在,當你再次訪問Manifests.DEFAULT,它會進入「測試屬性」。需要注意的是Manifest.DEFAULT實現Map接口:

System.out.println(Manifests.DEFAULT.get("Test-Property")) // Prints "Hello"