2014-06-25 8 views
7

क्या जावा मैनिफेस्ट में एक संपत्ति इंजेक्ट करने के लिए परीक्षण समय पर कोई तरीका है (या एक संपूर्ण मैनिफेस्ट इंजेक्ट करें)?जावा यूनिट परीक्षण सेट मैनिफेस्ट प्रॉपर्टी

हम मैनिफेस्ट (संस्करण संख्या) से एक मान पढ़ रहे हैं जो परीक्षण समय पर शून्य हो जाता है।

अभी तक हमने अपनी परीक्षण रूट में हार्ड कोडित 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(); 
} 

एक अंतिम उपाय के रूप में हम कार्यक्षमता प्रकट पढ़ता लपेट और यह नकली होगा, लेकिन इन एकीकरण परीक्षण कर रहे हैं, और करने वाले हैं ब्लैक बॉक्स बनें (यानी, हम मॉकिंग से परहेज कर रहे हैं)।

अतिरिक्त जानकारी: जावा 7, IntelliJ या Gradle में जूनिट परीक्षण चलाना।

+0

इसलिए, जब आप एक परीक्षण चलाने के लिए, जहां MANIFEST.MF स्थित है है, वास्तव में? –

+0

जब आप परीक्षण चला रहे हों तो संभवतः जावा मैनिफेस्ट को संशोधित करना क्यों चाहते हैं (शायद जुनीट?) जब परीक्षण एक स्टैंडअलोन जावा एप्लिकेशन है और एक कंटेनर में चल रहे एप्लिकेशन नहीं है? – czpona

उत्तर

2

आप jcabi-manifests लाइब्रेरी को आजमा सकते हैं: http://manifests.jcabi.com/। यह जावा मैनिफ़ेस्ट सुविधा का एक अमूर्त है और आपको नए डेटा को जोड़ने या रनटाइम पर कई मैनिफेस्ट को गठबंधन करने की अनुमति देता है।

विशिष्ट उपयोग Manifests.DEFAULT सिंगलटन तक पहुंचने के लिए होगा, जो रनटाइम पर आपके एप्लिकेशन की MANIFEST.MF प्रविष्टियां रखता है। यह इस वस्तु को संलग्न करने के लिए संभव है:

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

Manifests जावाडोक: 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" 
संबंधित मुद्दे