2014-06-25 9 views
7

C'è un modo in fase di test per iniettare una proprietà nel Manifest Java (o iniettare un intero manifest)?Set test di Java set Proprietà manifest

Stiamo leggendo un valore dal manifest (numero di versione) che al momento del test si risolve in null.

Finora abbiamo provato a inserire un file MANIFEST.MF codificato nella nostra root di test, ma non ha funzionato.

Questo è il codice che utilizziamo per leggere il manifesto:

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(); 
} 

Come ultima risorsa ci avvolgiamo la funzionalità che legge il manifesto e modelli, ma questi sono test di integrazione, e si suppone che essere scatola nera (cioè, stiamo evitando di deridere).

Ulteriori informazioni: Java 7, esecuzione di test Junit in IntelliJ o da Gradle.

+0

Così, quando si esegue un test, dove si MANIFEST.MF si trova, esattamente? –

+0

Perché si desidera modificare java manifest quando si eseguono test (probabilmente JUnit?) Quando test è un'applicazione Java autonoma e non un'applicazione in esecuzione in un contenitore? – czpona

risposta

2

Si consiglia di provare la libreria jcabi-manifests: http://manifests.jcabi.com/. È un'astrazione della funzione manifesti Java e consente di aggiungere nuovi dati o persino combinare più manifesti in fase di runtime.

L'utilizzo tipico sarebbe quello di accedere al singleton Manifests.DEFAULT, che contiene le voci MANIFEST.MF dell'applicazione in fase di runtime. E 'possibile aggiungere a questo oggetto:

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

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

Ora, ogni volta che si accede Manifests.DEFAULT ancora una volta, avrà la voce "Test-Proprietà". Si noti che Manifest.DEFAULT implementa l'interfaccia Map:

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