2015-07-26 4 views
5

मैं अक्सर एप्लिकेशन मॉड्यूल के लिए परीक्षण लिखते समय एंड्रॉइड परीक्षण /androidTest और यूनिट परीक्षण /test दोनों के लिए मैक्स या हेल्पर्स जैसे टेस्ट क्लास के सटीक सेट को डुप्लिकेट कर रहा हूं।परीक्षण कक्षाएं कैसे बनाएं जिनका उपयोग एंड्रॉइड परीक्षण और यूनिट परीक्षण दोनों में किया जा सकता है?

उदाहरण के लिए, मैं कुछ स्थिर कार्यों, जिनकी सहायता से /test/MockUtils.java में जल्दी से mocks सेट अप हालांकि है, मैं अपने Android परीक्षण में से किसी में यह सहायक वर्ग का पुन: उपयोग नहीं कर सकते हैं क्योंकि वे एक ही कक्षा पथ का हिस्सा नहीं है - /androidTest बनाम /test

मैंने एक नया मॉड्यूल बनाने का विचार किया है जिसमें केवल परीक्षण संसाधन हैं। हालांकि, यह विचार उड़ नहीं जाएगा क्योंकि एंड्रॉइड ग्रैडल प्लगइन ऐप मॉड्यूल पर निर्भर रहने से इंकार कर देता है।

प्रोजेक्ट टेस्टकॉम एक एपीके संग्रह को हल करता है जो संकलन निर्भरता के रूप में समर्थित नहीं है।

क्या परीक्षण कक्षाएं बनाने का कोई अन्य तरीका है जिसे एंड्रॉइड परीक्षण और यूनिट परीक्षण दोनों में पुन: उपयोग किया जा सकता है?

+0

अधिक यहाँ: [एंड्रॉयड पर इकाई परीक्षण और इंस्ट्रूमेंटेशन परीक्षण के बीच कोड शेयरिंग] (http://blog.danlew.net/2015/11/02/sharing -कोड-बीच-इकाई-परीक्षण-और-उपकरण-परीक्षण-ऑन-एंड्रॉइड /), [उपकरण और इकाई परीक्षणों के बीच साझा कोड] (https://gerrit.wikimedia.org/r/#/c/238184/1 /app/build.gradle) – JJD

उत्तर

6

नोट: यह एक थियोरिज्ड समाधान है, जिसे मैंने कोशिश नहीं की है।

चरण # 1: अपने मॉड्यूल में testSrc/ निर्देशिका बनाएं जिसके लिए आप साझा परीक्षण कोड सेट अप करने का प्रयास कर रहे हैं।

चरण # 2: उस निर्देशिका में साझा कोड रखें (जावा पैकेज पर आधारित उपयुक्त उपनिर्देशिका के साथ)।

चरण # 3: अपने मॉड्यूल के build.gradle फ़ाइल में अपने android बंद अंदर निम्नलिखित बंद करें:

sourceSets { 
    androidTest { 
     java.srcDirs <<= 'testSrc' 
    } 

    test { 
     java.srcDirs <<= 'testSrc' 
    } 
} 

क्या करना चाहिए Android के लिए Gradle बताया कि testSrcandroidTest में जावा कोड के लिए एक अन्य स्रोत निर्देशिका है और test स्रोत।

+0

मुझे आपके समाधान को संशोधित करना पड़ा क्योंकि बाएंशफ्ट कुछ कारणों से काम नहीं करता है। मुझे बजाय 'टेस्ट { java.srcDirs = [' src/test ',' testSrc '] } पथों को फिर से शुरू करना पड़ा था,' क्या आप अपना समाधान संपादित कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं? –

+0

@ सोमनोबस्ट्यूडेंट: बाएं-शिफ्ट ऑपरेटर के साथ आपके विशिष्ट लक्षण क्या थे?मैंने अभी एक नई परियोजना बनाई है, मेरे उत्तर में दिए गए चरणों का पालन किया, एंड्रॉइड स्टूडियो में ग्रैडल फ़ाइल सिंक सामान किया, और मुझे कोई बिल्ड त्रुटियां नहीं मिलीं। मैं एक खाली 'testSrc /' निर्देशिका के बावजूद भी परीक्षण चलाने में सक्षम था। – CommonsWare

+0

मैं 'इंटेलिजे 14.1.4/प्लगइन 1.2.3/ग्रैडल 2.4-सब' पर हूं और '<< '0 प्रभाव का उपयोग कर रहा हूं - आईडीई पथ हरे रंग को हाइलाइट नहीं करता है और इसके भीतर कक्षाओं को अनदेखा किया जाता है, मुझे संदर्भित करने की इजाजत नहीं देता मेरे परीक्षण में –

4

कॉमन्सवेयर के समाधान और https://code.google.com/p/android/issues/detail?id=181391 के आधार पर, अतिरिक्त कक्षा पथ जोड़ने का सही तरीका += या <<= ऑपरेटरों का उपयोग करना है।

sourceSets { 
    androidTest { 
     java.srcDirs <<= 'testSrc' 
    } 

    test { 
     java.srcDirs += 'testSrc' 
    } 
} 
0

नीचे दिए गए ब्लॉग में वर्णित समाधान ने मेरी मदद की।

http://blog.danlew.net/2015/11/02/sharing-code-between-unit-tests-and-instrumentation-tests-on-android/

मैं src/sharedTest/जावा में अपने साझा किए गए परीक्षण कोड डाल दिया। तब मैं build.gradle के लिए निम्न कोड कहा:

<pre> 
android { 
    sourceSets { 
    String sharedTestDir = 'src/sharedTest/java' 
    test { 
     java.srcDir sharedTestDir 
    } 
    androidTest { 
     java.srcDir sharedTestDir 
    } 
    } 
} 
</pre> 
संबंधित मुद्दे