ग्रैडल के साथ JUnit टेस्ट कैसे चलाएं?


95

वर्तमान में मेरे पास निम्नलिखित build.gradle फ़ाइल है:

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


यह build.gradle फ़ाइल यहाँ मेरे भंडार के लिए है । मेरी सभी मुख्य फाइलें src / model / में हैं और उनके संबंधित परीक्षण परीक्षण / मॉडल में हैं

मैं JUnit 4 निर्भरता को सही तरीके से कैसे जोड़ूं और फिर उन परीक्षणों को परीक्षण / मॉडल के फ़ोल्डर में चलाऊं ?

जवाबों:


104

मैं एक जून 4 निर्भरता को सही ढंग से कैसे जोड़ूं?

मान लें कि आप एक मानक मावेन (या समकक्ष) रेपो के खिलाफ हल कर रहे हैं:

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

परीक्षण / मॉडल के फ़ोल्डर्स में उन परीक्षणों को चलाएं?

आप अपने परीक्षण स्रोत को उसी तरह निर्धारित करते हैं:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

फिर परीक्षण को इस प्रकार करें:

./gradlew test

संपादित करें: यदि आप JUnit 5 का उपयोग कर रहे हैं, तो पूरा करने के लिए और भी चरण हैं, आपको इस ट्यूटोरियल का अनुसरण करना चाहिए ।


8
srcDirs = ["test/model"]थोड़ा और अधिक सटीक है क्योंकि यह डिफ़ॉल्ट परीक्षण स्रोतों निर्देशिका से छुटकारा दिलाता है, जबकि srcDir "test/model"एक और निर्देशिका जोड़ता है। के लिए एक ही mainस्रोत सेट।
पीटर निडरवाइजर

47

यदि आप अपने प्रोजेक्ट को डिफ़ॉल्ट ग्रेड पैकेज संरचना के साथ सेट करते हैं, तो:

src/main/java
src/main/resources
src/test/java
src/test/resources

तब आपको अपने परीक्षण चलाने के लिए sourceSets को संशोधित करने की आवश्यकता नहीं होगी। ग्रैडल यह पता लगाएगा कि आपके परीक्षण वर्ग और संसाधन src / test में हैं। फिर आप ऊपर कहे अनुसार चल सकते हैं। ध्यान देने वाली एक बात: प्रॉपर्टी फाइल सेट करते समय और अपने टेस्ट क्लासेस को दोनों ग्रेड और आप आईडीई से चलाते समय सावधान रहें। मैं Eclipse का उपयोग करता हूं, और जब JUnit से इसे चलाता है, Eclipse एक classpath (बिन निर्देशिका) चुनता है, जबकि gradle दूसरे (बिल्ड निर्देशिका) को चुनता है। यदि आप किसी संसाधन फ़ाइल को संपादित करते हैं, तो यह भ्रम पैदा कर सकता है, और परीक्षण रनटाइम में आपके परिवर्तन को नहीं देखा जा सकता है।


2
ग्रहण का निर्माण करने के लिए फ़ाइलों को ग्रेड के रूप में एक ही dir में निर्देशित करें (कुछ निराशाजनक त्रुटियों को रोक सकते हैं): प्रोजेक्ट -> गुण -> जावा बिल्ड पथ -> डिफ़ॉल्ट आउटपुट फ़ोल्डर: "बिन" को "बिल्ड" से बदलें। हालाँकि ... मेरे अनुभव में ऐसा लगता है कि हर बार अप्रत्याशित रूप से "बिन" डिफ़ॉल्ट रूप से "फिसलने" की आदत छूट जाती है। यह जानना अच्छा होगा कि क्या डिफ़ॉल्ट रूप से "बिल्ड" का उपयोग करने के लिए ग्रहण करने का एक तरीका है।
माइक कृंतक

2
@ माइक-कृंतक जहाँ तक मुझे पता है यह स्पष्ट रूप से ग्रहण और Gradle (देखें उदाहरण के लिए एक ही निर्माण पथ साझा करने के लिए हतोत्साहित किया जाता है के रूप में discuss.gradle.org/t/... )
mtraut

ठीक है, मैं सही खड़ा हूँ! ... और मुझे लगता है कि उसी डायर के संकलन से कुछ हासिल नहीं होगा। अधिकांश उद्देश्यों के लिए ग्रहण बिल्डर कार्यक्षमता एक मात्र सत्यापन उपकरण बन जाता है: "वूप्स, यह x, y और z के कारण संकलित नहीं होगा"।
माइक कृंतक

1
@DivDiff मेरी src फ़ोल्डर संरचना ऊपर बताए गए तरीके से सेटअप है, लेकिन फिर भी जब मैं ग्रेड टेस्ट करता हूं, तो यह कुछ भी नहीं करता है। यह मेरे परीक्षणों को बिल्कुल नहीं चलाता है। कोई उपाय?
गौरव

@ गौरव, मैंने आपको एक चैटरूम में आमंत्रित किया ताकि हम इसके बारे में ऑफ़लाइन बात कर सकें।
15

15

यदि आपने स्प्रिंग प्रीलिफ़र के साथ अपनी परियोजना बनाई है , तो सब कुछ सही ढंग से कॉन्फ़िगर किया जाना चाहिए और आपको जो कुछ भी करने की ज़रूरत है वह सभी को चलाना है ...

./gradlew clean test --info
  • --infoयदि आप परीक्षण आउटपुट नहीं देखना चाहते हैं तो ड्रॉप करें ।
  • ड्रॉप करें cleanयदि आप उन परीक्षणों को फिर से नहीं करना चाहते हैं जो पिछले बदलाव के बाद पहले ही पारित हो चुके हैं।

build.gradleस्प्रिंग बूट में परीक्षण के लिए आवश्यक निर्भरताएँ ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

किसी कारण से टेस्ट रनर आपको यह नहीं बताता है, लेकिन यह HTML रिपोर्ट बनाता है build/reports/tests/test/index.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.