2008-10-29 14 views
17

मैं एक फ़ाइल पार्सर कक्षा के लिए एक परीक्षण लिख रहा हूँ। पार्स विधि को फ़ाइल नाम पैरामीटर के रूप में प्राप्त होता है, और इसे पार्स करने के लिए इसे खोलना चाहिए (डुह)।जुनीट परीक्षण के अंदर मेवेन गुणों को कैसे पुनर्प्राप्त करें?

मैंने एक परीक्षण फ़ाइल लिखी है, जिसे मैंने अपनी प्रोजेक्ट निर्देशिका के अंदर परीक्षण/संसाधन निर्देशिका में डाल दिया है, और इस फ़ाइल को मेरे पार्स का परीक्षण करने के लिए पास करना चाहूंगा। चूंकि यह प्रोजेक्ट सीवीएस में है, और दूसरों द्वारा छेड़छाड़ की जाएगी, मैं फ़ाइल पथ को हार्ड कोड नहीं कर सकता, इसलिए मैंने अपने परीक्षण में फ़ाइल नाम बनाने के लिए मेवेन $ {basedir} प्रॉपर्टी का उपयोग करने के बारे में सोचा। कुछ ऐसा:

public void parseTest() { 
    ... 
    sut.parse(${basedir} + "src/test/resources/testFile"); 
    ... 
} 

क्या कोई जानता है कि मैं इसे कैसे प्राप्त कर सकता हूं?

1) एक प्रणाली संपत्ति (docs)

अपने पोम में आप की तरह कुछ कर सकता है के माध्यम से अपने परीक्षण के लिए फ़ाइल पथ दर्रा:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
     <configuration> 
      <systemProperties> 
      <property> 
       <name>filePath</name> 
       <value>/path/to/the/file</value> 
      </property> 
      </systemProperties> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

फिर

उत्तर

22

आप 2 विकल्प हैं आपके परीक्षण में आप कर सकते हैं:

System.getProperty("filePath"); 

2) फ़ाइल को sr के अंदर रखें आपके परीक्षण वर्ग के समान पैकेज के तहत सी/परीक्षण/संसाधन। फिर आप Class.getResourceAsStream (स्ट्रिंग फ़ाइल नाम) (docs) का उपयोग कर फ़ाइल पर जा सकते हैं।

मैं विकल्प 1 पर विकल्प 2 की अत्यधिक अनुशंसा करता हूं 1. सिस्टम गुणों के माध्यम से अपने परीक्षणों में चीजें पास करना बहुत गंदा आईएमओ है। यह आपके परीक्षणों को अनावश्यक रूप से परीक्षण धावक के साथ जोड़ता है और सड़क के नीचे सिरदर्द का कारण बनता है। क्लासपाथ से फ़ाइल लोड करना रास्ता है और यही कारण है कि मेवेन में संसाधन निर्देशिका की अवधारणा है।

+0

मैं विकल्प 2 ले जाऊंगा। लेकिन जैसा कि मैं क्लास.getResourceAsStream (स्ट्रिंग फ़ाइल नाम) विधि का उपयोग करने के बजाय फ़ाइल नाम पास करना चाहता हूं, मैं Class.getResource (स्ट्रिंग फ़ाइल नाम) का उपयोग कर रहा हूं .getFile()। धन्यवाद माइक – Alexandre

+0

यह अच्छा है। बस जागरूक रहें कि अगर आपको कभी भी जार से परीक्षण करना पड़ता है (जो असंभव है) तो आपको कुछ अजीब व्यवहार मिल सकता है। –

+2

यह सुनिश्चित नहीं है कि यह उत्तर कितना पूरा है - स्थानीय डीबी पते जैसे "एकीकरण परीक्षण" गुणों के बारे में क्या आप अपनी निजी सेटिंग्स.एक्सएमएल में स्टोर करना चाहते हैं? –

संबंधित मुद्दे