2013-02-06 9 views
5

मैं एक ऐसे प्रोजेक्ट में शामिल हो गया हूं जिसमें एक डेटाबेस बनाने के लिए SQL कथन के साथ बहुत सी फाइलें हैं जिनका उपयोग एकीकरण परीक्षण के लिए किया जाता है।अस्थायी डेटाबेस बनाना जो मैवेन टेस्ट चरणों में काम करता है?

मुझे आश्चर्य है कि मैं यूनिट परीक्षण (जावा और मेवेन का उपयोग करके) के लिए डेटाबेस बनाने के लिए इन फ़ाइलों का उपयोग कैसे कर सकता हूं।

मैं प्रत्येक इकाई परीक्षण के लिए एक एचएसक्यूएल इन-मेमोरी डेटाबेस बना सकता हूं, या यहां तक ​​कि बसंत jdbc एम्बेडेड-डेटाबेस सुविधा का उपयोग भी कर सकता हूं, लेकिन परीक्षण सेटअप में निष्पादित करने के लिए इतने सारे SQL कथन हैं कि यह स्केलेबल नहीं है।

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

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

एक विकल्प एक अद्वितीय अस्थायी फ़ाइल का उपयोग करने के लिए हो सकता है, उदा। जेडीबीसी ड्राइवर यूआरएल को जेडीबीसी के रूप में निर्दिष्ट करना: hsqldb: फ़ाइल:/path/to/अस्थायी/फ़ाइल, लेकिन मुझे यकीन नहीं है कि मैवेन में एक अनूठी अस्थायी फ़ाइल कैसे उत्पन्न करें।

ऐसा करने के तरीके पर कोई सुझाव, या यदि कोई बेहतर तरीका है?

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

उत्तर

0
  1. ऑन-डिस्क एच 2 डेटाबेस क्यों नहीं बनाते हैं, और प्रत्येक परीक्षण में इसका उपयोग होता है? जब तक परीक्षण एक दूसरे के साथ समानांतर या बातचीत में नहीं चलते हैं, तो आपको सर्वर की आवश्यकता नहीं होती है।

  2. और भी इतना: बस @ पहले से मेमोरी डेटाबेस बनाएं और उन्हें @After में हटा दें। क्या आप वाकई बहुत धीमी हैं?

  3. प्री-इंटीग्रेशन-टेस्ट में, आप एक एच 2 (या डर्बी) सर्वर लॉन्च कर सकते हैं, और इसे एकीकरण-परीक्षण में बंद कर सकते हैं।

  4. आप एक मेवेन प्लगइन लिख सकते हैं जो एम्बेडेड डेटाबेस सेवा का ट्रैक रखने के लिए सत्र स्थिति का उपयोग करता है, लेकिन यह उतना ही है (3)।

+0

उत्तर के लिए धन्यवाद। हां, प्रत्येक इकाई परीक्षण में @ पहले से पूरे डेटाबेस को बनाने में धीमा होना बहुत अधिक है। मैं एच 2 या डर्बी से परिचित नहीं हूं लेकिन इन्हें देख लूंगा। –

+0

@ बेन्सन: कल जैसा कि आपकी अन्य पोस्टों में से एक पर बताया गया है, जैसा कि 4 में अनुशंसित है), मैंने वास्तव में इसके लिए एक मेवेन प्लगइन बनाया है। – carlspring

3

इस मामले के लिए मैंने derby-maven-plugin बनाया है। यह मेवेन सेंट्रल से उपलब्ध है, इसलिए आपको कोई अतिरिक्त भंडार या कुछ भी जोड़ने की आवश्यकता नहीं है।

आप इस तरह इसका इस्तेमाल कर सकते हैं:

<project ...> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.carlspring.maven</groupId> 
        <artifactId>derby-maven-plugin</artifactId> 
        <version>1.8</version> 
        <configuration> 
         <basedir>${project.build.directory}/derby</basedir> 
         <port>1527</port> 
        </configuration> 
        <executions> 
         <execution> 
          <id>start-derby</id> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>start</goal> 
          </goals> 
         </execution> 
         <execution> 
          <id>stop-derby</id> 
          <phase>post-integration-test</phase> 
          <goals> 
           <goal>stop</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </project> 

अधिक जानकारी के लिए आप भी USAGE देख सकते हैं।

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