2012-04-27 32 views
5

मेरे वसंत + मेवेन ऐप में, मैंने डेटा एक्सेस लेयर के लिए कुछ परीक्षण बनाए हैं जिन्हें मैं अब कई डेटा स्रोतों के विरुद्ध चलाने के लिए चाहता हूं। मैं की तरह कुछ है:मैवेन: विभिन्न कॉन्फ़िगरेशन के लिए समान परीक्षण चलाना

@ContextConfiguration(locations={"file:src/test/resources/testAppConfigMysql.xml"}) 
public class TestFooDao extends AbstractTransactionalJUnit38SpringContextTests { 
    public void testFoo(){ 
    ... 
    } 
} 

यह वर्तमान में config स्थान हार्डकोडेड है, तो यह केवल एक डेटा स्रोत के खिलाफ इस्तेमाल किया जा सकता है। दो बार परीक्षण का आह्वान करने और दो अलग-अलग कॉन्फ़िगरेशन पास करने का सबसे अच्छा तरीका क्या है (testAppConfigMysql.xml और testMyConfigHsqlDb.xml कहें)?

मैंने सिस्टम गुणों के माध्यम से ऐसा करने के लिए सुझाव देखे हैं। सिस्टम प्रॉपर्टी के विभिन्न मूल्यों के साथ, मैं दो बार परीक्षणों का आह्वान करने के लिए मैवेन को कैसे बता सकता हूं?

उत्तर

1

मुझे नहीं पता कि कुछ सेक्सी और फैंसी समाधान क्या है, इसके लिए सरल भी है। मैं सिर्फ सभी परीक्षण सामग्री के साथ आधार वर्ग को लागू करने और उसके बाद, अलग एनोटेशन आधारित विन्यास के साथ 2 वर्गों में यह वारिस इस तरह होगा:

@ContextConfiguration(locations={"firstDs.xml"}) 
public class TestFooDaoUsingFirstDs extends TestFooDao { 
} 

@ContextConfiguration(locations={"secondDs.xml"}) 
public class TestFooDaoUsingSecondDs extends TestFooDao { 
} 

जब तक आप इस तरह से अलग datasources की वास्तव में उच्च संख्या का प्रबंधन करने के लिए है, वह यह है कि मेरे लिए ठीक है।

+0

लेकिन मेरे पास कई दास फू, बार, ... (उनमें से लगभग 15) हैं और इस प्रकार 15 परीक्षण कक्षाएं टेस्टफूडाओ, टेस्टबार्डडाओ ... आपके समाधान में मुझे कक्षाओं की संख्या दोगुना करना होगा, जो मैं करता हूं नहीं चाहते (मैं सभी परीक्षणों को एक विशाल वर्ग में भी विलय नहीं करना चाहता) – jfu

+0

हाँ, मुझे पता है। लेकिन मुझे वास्तव में कोई बेहतर समाधान नहीं दिख रहा है। जैसा कि मैंने कहा, मुझे पूरी तरह से पता है कि यह समाधान सही नहीं है और थोड़ा सा बेकार है। अन्य बात जो मेरे दिमाग में आई थी, संदर्भ कॉन्फ़िगरेशन के लिए वसंत अनिवार्य समर्थन के साथ जुनीट के सिद्धांतों के किसी प्रकार के मिश्रण का उपयोग करने का प्रयास करना है। इसका मतलब है कि आप स्प्रिंग संदर्भ की एनोटेशन-आधारित कॉन्फ़िगरेशन ड्रॉप करते हैं और किसी विधि को कॉल करके इसे किसी भी तरह सेटअप करने का प्रयास करते हैं। हालांकि मुझे पता नहीं है कि स्प्रिंग एपीआई ने आपको कुछ संदर्भ या उदाहरण देने के लिए अच्छा लगाया है। मुझे यकीन नहीं है कि यह वास्तव में संभव है और ठीक काम करता है, लेकिन मैं इसके बारे में हालांकि। –

+0

एक और विचार: शायद स्प्रिंग टेस्टिंग समर्थन वर्गों (जैसे 'SpringJUnit4ClassRunner' या इसके आसपास कुछ सहायक) जैसे विस्तार से मामला हल हो जाएगा, अगर वास्तव में आउट-ऑफ-द-बॉक्स समाधान नहीं है।मेरी राय में, आप कोड के टुकड़े को ओवरराइड कर सकते हैं जो '@ ContextConfiguration' एनोटेशन को संभालता है और अपने तर्क को लागू करने का प्रयास करता है, शायद कस्टम एनोटेशन का उपयोग करके जो एकाधिक संदर्भों को इंगित करने वाले पैरामीटर को स्वीकार करता है। –

0

बजाय file:..., आप classpath:... उपयोग कर सकते हैं (src/test/resources निकालने के लिए, यह अंतर्निहित है कि अगर आप classpath उपयोग करें)।

<import resource="dao-${datasource}.xml" />

आप Maven विकल्प -Ddatasource=foo साथ निर्माण चलाते हैं, तो यह जो कुछ भी आपके द्वारा निर्दिष्ट के साथ मास्टर संदर्भ में ${datasource} बदल देगा: तो फिर तुम लाइन के साथ एक एकल मास्टर संदर्भ हो सकता है। तो आपके पास अलग-अलग कॉन्फ़िगरेशन के लिए datasource-foo.xml, datasource-bar.xml आदि हो सकते हैं।

(आपको काम करने के लिए पीओएम में मेवेन संसाधन फ़िल्टरिंग को सक्षम करने की आवश्यकता है)।

वैकल्पिक रूप से, स्प्रिंग 3.1 में नया सामान की जाँच: http://www.baeldung.com/2012/03/12/project-configuration-with-spring/

संपादित करें: एक तीसरा विकल्प सभी परीक्षण कक्षाएं कुछ सुपर क्लास का विस्तार करने के लिए होगा, और JUnit के @Parameterised, अलग स्प्रिंग जहां मापदंड हैं का उपयोग संदर्भों। आप उस मामले में @ContextConfiguration उपयोग नहीं कर सका, लेकिन आप हमेशा मैन्युअल रूप से वसंत प्रसंग बना सकते हैं, तो autowire परीक्षण वर्ग का उपयोग कर org.springframework.beans.factory.config.AutowireCapableBeanFactory.autowireBean()

+0

मैं एक बार मेवेन चलाने के लिए और दोनों डेटा स्रोतों का परीक्षण करना चाहता हूं; आपके समाधान में मुझे डेटासोर्स चर के दो मानों को पार करने, इसे दो बार चलाने की आवश्यकता है। क्या मैवेन surefire प्लगइन के भीतर चर सेट सेट करना संभव है (उदा। दो निष्पादन या कुछ ऐसे परिभाषित करें)? लक्ष्य एमवीएन परीक्षण – jfu

+0

चलाते समय दोनों डेटा स्रोतों का परीक्षण करना है, हाँ, यह दर्द का थोड़ा सा है। मुझे असफलता/निश्चित रूप से प्लगइन को एक से अधिक बार चलाने में बहुत भाग्य नहीं मिला है - वे आउटपुट फ़ोल्डर्स और इसी तरह के बारे में भ्रमित हो जाते हैं। – artbristol