मावेन में टेस्ट कोड साझा करना


183

आप मावेन में किसी अन्य मॉड्यूल से परीक्षण कोड पर कैसे निर्भर कर सकते हैं?

उदाहरण के लिए, मेरे पास 2 मॉड्यूल हैं:

  • आधार
  • मुख्य

मैं बेस में बेस टेस्ट क्लास बढ़ाने के लिए मेन में टेस्ट केस करना चाहूंगा। क्या यह संभव है?

अद्यतन: एक स्वीकार्य उत्तर मिला , जिसमें एक परीक्षण जार बनाना शामिल है।


1
यह नीचे दिए गए स्वीकृत उत्तर के संयोजन के बराबर एक उत्तर लगता है, जो वास्तव में नीचे दिए गए बड़े उत्तर पर एक नोट है, अब मावेन साइट पर है: परीक्षण कक्षाओं वाले जार कैसे बनाएं
— डेविड टोनहोफर

जवाबों:


189

मैं क्लासिफायर के बजाय टाइप का उपयोग करने की सलाह देता हूं (यह भी देखें: क्लासिफायरियर )। यह मावेन को स्पष्ट रूप से बताता है कि आप क्या कर रहे हैं (और मैंने पाया है कि m2eclipse और q4e दोनों इसे बेहतर पसंद करते हैं)।

<dependency>
  <groupId>com.myco.app</groupId>
  <artifactId>foo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

5
क्या विशेष रूप से टेस्ट-जार प्रकार के लिए com.myco.app के लिए एक अलग निर्भरता प्रविष्टि होनी चाहिए?
— नूह वाटकिंस


11
जब मैं इस उत्तर को पहली बार पढ़ रहा था, तो मैं उलझन में था ... यह वास्तव में इसलिए है क्योंकि इसका कोई मतलब नहीं है, आपको पहले नीचे दिए गए उत्तर को पढ़ना चाहिए: stackoverflow.com/questions/174560/…
— TanguyP

179

बेस मॉड्यूल सुझाव के लिए धन्यवाद। हालाँकि, मैं केवल इस उद्देश्य के लिए एक नया मॉड्यूल नहीं बनाऊँगा।

अचूक मावेन प्रलेखन और एक ब्लॉग में एक स्वीकार्य जवाब मिला । यह भी देखें कि " टेस्ट क्लास युक्त जार कैसे बनाएं "।

यह जार प्लगइनsrc/test/java का उपयोग करके कोड की जार फ़ाइल बनाता है ताकि परीक्षणों के साथ मॉड्यूल कोड साझा कर सकें।

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.4</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

संलग्न परीक्षण JAR का उपयोग करने के लिए, जो आपके ऊपर बनाया गया था, बस परीक्षणों के एक निर्दिष्ट क्लासिफायर के साथ मुख्य विरूपण साक्ष्य पर निर्भरता निर्दिष्ट करें:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.myco.app</groupId>
      <artifactId>foo</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project> 

14
ध्यान दें, कि निर्भरता में <classifier> test </ classifier का उपयोग करके समस्याएँ हो सकती हैं। इसके बजाय, <टाइप> टेस्ट-जार </ टाइप> का उपयोग करें। यहाँ Maven jira.codehaus.org/browse/MNG-2045 में एक मुद्दा है और IntelliJ में एक असंबंधित है youtrack.jetbrains.net/issue/IDEA-54254
— एमिल

यह मेरे लिए बहुत उपयोगी रहा है, लेकिन मुझे एक समस्या मिली है: जब मैं "install -Dmaven.test.skip = true" निष्पादित करता हूं, तो भी निर्भरता परीक्षण-जार की आवश्यकता होती है और असफलता मिलती है
— Javi Pedrive

@JaviPedrera यह मेरे लिए काम करता है, भले ही मैं 'mvan clean install -DskipTests = true' करूं और टेस्ट-जार बन रहा हो। कोई त्रुटि
— Karussell

1
@ क्या आपने यह सुनिश्चित किया है कि आप अपने जार की पैकेजिंग करते समय ServiceResultTransformer का उपयोग करें? अन्यथा आप एक-दूसरे को ओवरराइट करने वाली सेवा फ़ाइलों के साथ समाप्त हो सकते हैं।
— jontejj

1
maven.apache.org/plugins/maven-shade-plugin/examples/… वहाँ आप इसके बारे में अधिक पढ़ सकते हैं।
— जोंतेजज

12

हमने इसे src / main / java के रूप में टेस्ट कोड के साथ maven प्रोजेक्ट बनाकर और प्रोजेक्ट्स के लिए निम्न निर्भरता को जोड़कर हल किया:

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>

हां, यह काम करेगा, धन्यवाद! वैकल्पिक उत्तर के लिए मेरी टिप्पणी नीचे देखें जो मुझे पसंद है।
— Flicken

1
हम इस दृष्टिकोण का उपयोग करते हैं, यह थोड़ा मूर्खतापूर्ण है कि आप क्लासिफायर या प्रकारों के लिए जाने के लिए मजबूर हैं (जो कि अधिकांश उपयोगकर्ताओं के लिए मावेन में शायद ही मूल बातें हैं) और आपको कुछ प्रयासों के साथ जार का निर्माण करना होगा जब आपको वास्तव में ज़रूरत नहीं है यह या - जैसा कि इस मामले में - आपके पास केवल परीक्षण कोड के लिए आधार के रूप में गैर-परीक्षण कोड है।
— virgo47

-3

हां ... बस बेस मॉड्यूल को मेन में निर्भरता के रूप में शामिल करें। यदि आप केवल टेस्ट कोड प्राप्त कर रहे हैं, तो आप यह सुनिश्चित करने के लिए स्कोप टैग का उपयोग कर सकते हैं कि मावेन आपकी कलाकृति में कोड को शामिल नहीं करता है। कुछ इस तरह काम करना चाहिए:

<dependency>
    <groupId>BaseGroup</groupId>
    <artifactId>Base</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <scope>test</scope>
</dependency>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.