2014-06-25 54 views
7

Java Manifest'ine bir özellik enjekte etmek (veya tüm bir manifesti enjekte etmek) için bir test süresi var mı?Java birim testleri ayarlandı Manifest özelliği

Test zamanını null olarak çözen bildiriden (sürüm numarası) bir değer okuyoruz.

Şimdiye kadar test kodumuzda kodlanmış bir MANIFEST.MF dosyası yerleştirmeyi denedik, ancak işe yaramadı.

Biz bildirim okumak için kullandığınız koddur: bunu apaçık okur işlevselliği sarın ve alay edeceğiz

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

Son çare olarak, ancak bu entegrasyon testleri, ve gerekiyordu kara kutu olmak (yani, alay etmekten kaçınıyoruz).

Ek bilgi: Java 7, IntelliJ'de veya Gradle uygulamasında Junit testleri çalıştırılıyor.

+0

bir testi çalıştırdığınızda Yani, nerede MANIFEST.MF bulunduğu almaktadır tam olarak? –

+0

Test bir bağımsız java uygulaması olduğunda ve bir kapsayıcıda çalışan bir uygulama olmadığında, testler (muhtemelen JUnit?) Çalıştırıyorken neden java manifest'ini değiştirmek istersiniz? – czpona

cevap

2

jcabi-manifests kütüphanesini denemek isteyebilirsiniz: http://manifests.jcabi.com/. Java manifestleri tesisinin bir soyutlamasıdır ve yeni verileri eklemenize veya hatta çalışma zamanında çoklu manifestoları birleştirmenize izin verir.

Tipik kullanım, uygulamanızın MANIFEST.MF girişlerini çalışma zamanında tutan Manifests.DEFAULT tektonuna erişmek olacaktır. Bu nesneye eklemek mümkündür:

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

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

, yeniden Manifests.DEFAULT eriştiklerinde, bu girdiyi "Test-Mülkiyet" olacaktır. Manifest.DEFAULTMap arabirimini uygulayan unutmayın:

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