2009-03-11 11 views
17

में जुनीट चलाने पर स्वचालित रूप से गुण जोड़ें, मेरे ग्रहण पर मेरे यूनिट परीक्षण चलाने के लिए, मुझे VM के लिए कुछ गुण सेट करने की आवश्यकता है।एक्लिप्स

इस प्रकार, जब मैं पहली बार अपना जुनीट परीक्षण चलाता हूं, तो मैं "ओपन रन डायलॉग" में जाता हूं, फिर इस परीक्षण के लिए मेरे जुनीट कॉन्फ़िगरेशन में, मैं "तर्क" टैब में जाता हूं और "वीएम तर्क" में जो कुछ भी चाहता हूं उसे डालता हूं पाठ क्षेत्र

जब मैं अपना जुनीट चलाता हूं तो स्वचालित रूप से गुणों का एक सेट जोड़ने का कोई तरीका है, इसलिए मैं परीक्षण कक्षा पर राइट-क्लिक करने में सक्षम हूं, और परीक्षण चलाने के लिए "रन के रूप में> जूनिट टेस्ट" पर क्लिक कर सकता हूं ?

तकनीकी जानकारी: ग्रहण 3.3.2, JUnit 4, जावा 5


संपादित, हारून Digulla से प्रतिक्रिया के बारे में:

इन गुणों स्प्रिंग विन्यास फाइल में किया जाता है *। इस प्रकार, मैं हारून द्वारा दिए गए विचार का उपयोग नहीं कर सकता, क्योंकि टेस्ट चलाने से पहले वसंत शुरू किया जाएगा।

इसके अतिरिक्त, मुझे यह जानने की जरूरत है कि क्या मैं ग्रहण में एक आसान तरीके से इसे प्राप्त कर सकता हूं। इस प्रकार समाधान को एक्लिप्स के बाहर आवेदन के संकलन पर कोई प्रभाव नहीं होना चाहिए, क्योंकि मेरा आवेदन अंततः मैवेन 2 द्वारा संकलित (और परीक्षण) किया जाएगा।

* कुछ "इकाई" परीक्षणों को वास्तव में मेरे वसंत विन्यास को चलाने की आवश्यकता है। ठीक है, मुझे पता है कि यह वास्तविक यूनिट परीक्षण नहीं है; ओ)

संपादित करें 2: वास्तव में, मैं वास्तव में एक परीक्षण इकाई द्वारा वसंत विन्यास शुरू कर रहा था। इस प्रकार, वसंत शुरू करने से पहले, मैं सिस्टम गुणों की जांच करता हूं, और यदि मेरी गुण सेट नहीं हैं, तो मैं उन्हें आवश्यक मान देता हूं ...

हालांकि, मैं थोड़ा निराश हूं कि ग्रहण मेरे लिए ऐसा नहीं कर सकता स्वचालित रूप से ...

+0

काम किया बस वसंत परीक्षण के बारे में स्पष्ट किया जाना है। वसंत का उपयोग करते समय ओपी क्या बात कर रहा है "RunWith (SpringJUnit4ClassRunner.class) और ContextConfiguration" नियमित जूनिट से पहले वसंत शुरू करेगा इससे पहले और पहले क्लास हिट हो जाएंगे, इसलिए सेटिंग सिस्टम गुण उन काम नहीं करेंगे। – sMoZely

उत्तर

7

मेरा समाधान एक परियोजना में सभी परीक्षणों के लिए एक सार परीक्षण आधार वर्ग बनाना है जो टेस्टकेस को बढ़ाता है। इसे अमूर्त होना चाहिए ताकि स्वचालित इकाई परीक्षण खोजक इसे नहीं मान सके।

इस कक्षा के स्थिर कोड ब्लॉक में, मैंने अपनी सभी संपत्तियों को सेट किया है। यह सुनिश्चित करता है कि कोड एक बार और केवल एक बार चलता है और यह मेरे प्रोजेक्ट में किसी भी परीक्षण से पहले चलता है।

[संपादित करें] आप कहते हैं कि परीक्षण चलाने से पहले वसंत शुरू किया गया है। यह आपकी परियोजना में एक बग है: यह परीक्षण होना चाहिए जो स्प्रिंग प्रारंभ करते हैं। अन्यथा, आप हमेशा इस समस्या में भाग लेंगे कि आपको अपने नियंत्रण के बाहर कुछ परीक्षण करना है।

इसलिए, मैं स्प्रिंग इनिट कोड को उस स्थान पर ले जाने का सुझाव देता हूं जहां आप इसे उस बिंदु पर कॉल कर सकते हैं जब पर्यावरण तैयार हो।

वैकल्पिक रूप से, जांचें कि पर्यावरण सेटअप() में सही ढंग से स्थापित है और कोई संपत्ति गुम होने पर त्रुटि फेंक देती है। इस तरह, आपको कम से कम पता चलेगा कि परीक्षण बाद में क्यों विफल हो जाएंगे। लेकिन जब भी उपप्रणाली जीवन में आती है तब भी मैं कुल नियंत्रण रखना पसंद करता हूं। कुछ और आपदा आपदा के लिए begs। तुम भी गुण पढ़ सकते हैं:

+0

मैं आपके विचार का उपयोग नहीं कर सकता, जैसा कि मेरे संपादन में समझाया गया है (मैं इसे कम नहीं करता क्योंकि यह एक बुरा विचार नहीं है) ... – romaintaz

+2

मैं स्थिर कोड ब्लॉक init से सहमत हूं। एक और विकल्प है: @BeforeClass एक विधि पर जहां आप अपने सिस्टम चर को init कर सकते हैं। – zeratul021

7

जब मैं कुछ गुण प्रविष्टियों मेरी JUnit परीक्षण के लिए मैं लागू सेट करना चाहते हैं

protected void setUp() throws Exception { 
     super.setUp(); 

     System.setProperty("Property1", "value1"); 
     System.setProperty("Property2", "value2"); 
} 

गुण से पहले परीक्षण methode

संपादित कहा जाता है सेट कर रहे हैं निम्नलिखित एक फ़ाइल से और सिस्टम गुणों के लिए

+0

हारून डिगुल्ला के जवाब के लिए वही टिप्पणी। यदि गुण वसंत द्वारा उपयोग किए जाते हैं तो यह काम नहीं करेगा ... – romaintaz

+0

आपको सेटअप विधि के अंदर सभी मूल्यों और वस्तुओं को प्रारंभ करना चाहिए। अन्यथा testcases अद्यतन करें। –

1

मुझे कभी नहीं समझा कि लॉन्च कॉन्फ़िगरेशन के पास पर्यावरण चर को परिभाषित करने का कोई तरीका क्यों है, लेकिन सिस्टम प्रॉपर्टी जोड़ने का एकमात्र तरीका वीएम तर्क जोड़ना प्रतीत होता है ।

जिस तरह से मैंने इसके आसपास काम किया है, वह आवश्यक गुणों की उपस्थिति के लिए परीक्षण (या एक अमूर्त परीक्षण बेस क्लास) परीक्षण है, यदि वे वहां नहीं हैं तो मैं उन्हें क्लासपाथ पर एक .properties फ़ाइल से लोड करता हूं ।

यह काम करता है क्योंकि मैं अभी भी उन्हें ओवरराइड कर सकता हूं या उन्हें एएनटी या मेवेन से निर्दिष्ट कर सकता हूं लेकिन 'राइट क्लिक' -> रन -> जूनिट व्यक्तिगत टेस्ट फाइलों का परीक्षण भी कर सकता है।

संपादित करें: यहाँ भार एक गुण एक ही तरीके से फाइल को वैकल्पिक रूप से करने के लिए स्प्रिंग होने का एक उदाहरण के रूप में ऊपर वर्णित है: इस

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="database.properties"/> 
     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="systemPropertiesMode"> 
      <util:constant static-field="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     </property> 
</bean> 
26

आप की कोशिश कर सकते -

Window->Preferences->Java->Installed JREs 
करने के लिए जाना

ans का चयन

-DrunningInEclipse 

से आप "डिफ़ॉल्ट वीएम" प्राइमर को उपयोग करने के बजाय उपयोग में जा सकते हैं अपने testcase के भीतर:

System.getProperty("runningInEclipse") != null 
+0

यह काम करता है! महान! – Wolfgang

+0

शानदार! धन्यवाद। –

+0

क्या प्रति-परियोजना आधार पर इसे निर्दिष्ट करने का कोई तरीका है? – Stewart

1

मेरी JUnit परीक्षणों में से एक में इस तरह से विधि का इस्तेमाल किया सहमत हो गए और यह

 


    @BeforeClass 
     public static void setupProperties() { 
      System.setProperty("catalina.base", "C:\\sam-tomcat-7.0.42"); 
     } 

+0

मुझे यह समाधान पता है, लेकिन यह मेरी आवश्यकताओं का सम्मान नहीं करता था। मैं केवल ग्रहण के लिए एक समाधान चाहता था। इसका उपयोग करके, इसका अर्थ मेवेन (यानी आईडीई के बाहर) द्वारा "डिफ़ॉल्ट" निर्माण पर असर पड़ेगा। इसके अलावा, यह केवल एक वर्ग के लिए काम करता है (या आपको अपने सभी परीक्षणों को कक्षा को विस्तारित करना है जो इस '@ पहले क्लास' को परिभाषित करता है)। – romaintaz