Android ग्रेडल में testCompile और AndroidTestCompile के बारे में उलझन में है


87

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

क्या कोई दोनों के बीच का अंतर समझा सकता है और रोबोइलेक्ट्रिक का उपयोग करते समय इनमें से किसका उपयोग किया जाना चाहिए?

जवाबों:


120

बस testCompileइकाई परीक्षणों ( src / परीक्षण में स्थित ) के लिए विन्यास है और androidTestCompileपरीक्षण एपीआई (जो src / androidTest में स्थित है ) के लिए उपयोग किया जाता है । चूंकि आप इकाई परीक्षण लिखने का इरादा कर रहे हैं, इसलिए आपको उपयोग करना चाहिए testCompile

अद्यतन: दोनों के बीच मुख्य अंतर testएक नियमित जावा JVM में चलता है, जबकि androidTestस्रोत परीक्षण Android डिवाइस (या एक एमुलेटर) पर चलते हैं।


धन्यवाद। यही मैंने पहले सोचा था, लेकिन अगर ऐसा है तो कुछ संदर्भ robolectric dependence testCompile के साथ और कुछ AndroidTestCompile के साथ। क्या ऐसा पुस्तकालय नहीं है जो एकीकरण परीक्षण लिखने में मदद करता हो? यदि ऐसा है तो यह androidTestCompile के साथ संदर्भित नहीं किया जाना चाहिए? हालांकि यहां तक ​​कि परीक्षणबोधक का उपयोग करने के लिए robolectric निर्देश की आधिकारिक गाइड ... क्षमा करें, लेकिन यह सिर्फ इस बिंदु पर मुझे बहुत भ्रमित कर रहा है जैसा कि आप देख सकते हैं।
लुकास

3
नामकरण परंपरा थोड़ी अजीब है। मूल रूप से, यदि आप इकाई परीक्षण लिख रहे हैं (परीक्षण जो डिवाइस पर नहीं चलाए जाएंगे) तो वे 'src / test' में मौजूद होंगे और इसलिए उनकी निर्भरता testCompileकॉन्फ़िगरेशन में है। androidTestCompileकॉन्फ़िगरेशन में जोड़ी गई निर्भरता केवल 'src / androidTest' में स्रोत के लिए उपलब्ध होगी, जो वास्तव में एक एपीके में बनाई गई है और एक डिवाइस पर तैनात है।
मार्क विएरा

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

1
यह मुख्य रूप से शब्दार्थ है, इसलिए मैं उन पर नहीं लटके। रोबोइलेक्ट्रिक के साथ लिखे गए कई परीक्षण यकीनन एकीकरण परीक्षण हैं, और वैसे भी इकाई परीक्षण नहीं हैं। कहा जा रहा है कि, दोनों के बीच मुख्य अंतर यह है कि 'src / test' डेवलपर्स मशीन पर एक मानक JVM में चलता है और 'src / androidTest' एक एपीके में पैक किया जाता है और एक वास्तविक डिवाइस (या एमुलेटर) पर चलता है।
मार्क विएरा

1
मुझे लगता है कि 'src / test' के लिए समर्थन जो आपने पहले देखा था, बस वही था जो मानक ग्रेडल जावा प्लगइन के माध्यम से उपलब्ध था। इसलिए, स्वाद या प्रकार के निर्माण के लिए कोई समर्थन नहीं था। अब एंड्रॉइड प्लगइन को प्रति-परीक्षण इकाई परीक्षण स्रोत सेट को शामिल करने के लिए, यूनिट परीक्षणों के लिए पूर्ण समर्थन है।
मार्क विएरा

3

अपने प्रश्न का उत्तर देने के लिए - रबॉइलेक्ट्रिक के लिए testCompile का उपयोग करें

क्यों, क्योंकि robolectric JVM पर सभी Android डिवाइस व्यवहार का मज़ाक उड़ाता है।

testCompile और androidTestCompile "कन्वेंशन द्वारा" हैं जो एंड्रॉइड प्लगइन द्वारा प्रदान किए गए कार्यों को चलाने के दौरान एंड्रॉइड फ़ोल्डर्स का उपयोग करता है।

androidTestDebug AndroidTest फ़ोल्डर से परीक्षण चुनता है, TestDebug परीक्षण फ़ोल्डर से परीक्षण चुनता है,

फिर से ये केवल कन्वेंशन फ़ोल्डरों द्वारा हैं, आप इन कॉन्फ़िगरेशन के लिए स्रोत सेट दे सकते हैं

ध्यान दें: एस्प्रेसो इतनी भयानक लाइब्रेरी है कि रोबोइलेक्ट्रिक से दूर जाने की कोशिश करें :)


1

//इकाई का परीक्षण

testCompile 'junit:junit:4.12'

उपरोक्त कोड android स्टूडियो में build.gradle फ़ाइल में JUnit 4 की निर्भरता है। आप देखते हैं कि इसमें टेस्टकंपाइल है, बीक्युस जेयूनाइट जेवीएम पर चलता है और इसे चलाने के लिए डिवाइस या एमुलेटर की आवश्यकता नहीं होती है। इसका मतलब यह भी है कि JUnit परीक्षणों को चलाने के लिए एप्लिकेशन संदर्भ की आवश्यकता नहीं होगी और अगर उन्हें आवश्यकता होती है तो हमें उन्हें "MOCK" करने की आवश्यकता होगी।

// इंस्ट्रूमेंटेड यूनिट टेस्टिंग

androidTestCompile('com.android.support.test:runner:0.5', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

अब हम यहां AndroidTestCompile देखते हैं, क्योंकि इस बार हम परीक्षण के लिए डिवाइस या एमुलेटर का उपयोग करने का इरादा रखते हैं, अर्थात इंस्ट्रूमेंटेशन परीक्षण। बेटर स्पष्टीकरण के लिए मैं developer.android.com से पढ़ने का सुझाव दूंगा


0

JVM परीक्षण या यूनिट परीक्षण के लिए निर्भरता जोड़ने के लिए (परीक्षण केवल जावा पर्यावरण पर भरोसा करते हैं, हमें किसी भी Android वातावरण की आवश्यकता नहीं है)।

हम testCompile निर्देश का उपयोग करते हैं। उदाहरण:

dependencies {
    testCompile gradleTestKit()
}

इंस्ट्रूमेंटेशन टेस्ट के लिए निर्भरता को जोड़ने के लिए (जो परीक्षण मुख्य रूप से एंड्रॉइड पर्यावरण पर भरोसा करते हैं), हम androidTestCompileनिर्देश का उपयोग करते हैं ।

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