2013-10-28 11 views
6

मैंने एंड्रॉइड स्टूडियो का उपयोग करना शुरू कर दिया है और हाल ही में एंड्रॉइड विकास के लिए धीरे-धीरे बढ़ाना है और इसे ग्रहण/चींटी या मेवेन से काफी बेहतर लगता है। हालांकि मैंने हाल ही में अपने ऐप के साथ किसी प्रकार की इकाई और एकीकरण परीक्षण को लागू करने की कोशिश करना शुरू कर दिया है। मैं हाल ही में Google द्वारा जारी एस्प्रेसो फ्रेमवर्क का उपयोग करके काम कर रहे बुनियादी परीक्षण प्राप्त करने में सक्षम था। मेरे पास कुछ परीक्षण थे, हालांकि मुझे ऑब्जेक्ट्स के मॉक किए गए संस्करणों को नकल करने और इंजेक्ट करने की आवश्यकता थी। मैंने अतीत में एक और प्रोजेक्ट के लिए डैगर का इस्तेमाल किया, इसलिए मैंने अपनी परियोजना में डैगर शामिल किया। हालांकि अब मेरा परीक्षण निम्न त्रुटि के कारण नहीं चलेंगे:उपकरण चलाने के लिए एंड्रॉइड ग्रेडल + डैगर का उपयोग करना

gradle connectedCheck 

...

4.1.2 failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' :EspressoApp:connectedCheck

मैं यहाँ इस का एक सरल डेमो बनाया: https://github.com/mwolfe38/android-espresso-dagger

बस क्लोन और फिर कमांड लाइन रन से: ग्रेडल कनेक्ट चेक

उपरोक्त में मैंने निर्भरताओं को कई अलग-अलग तरीकों से आजमाया है, मूल रूप से इस तरह:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
    compile 'com.squareup.dagger:dagger:1.1.0' 

    instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar', 
      'libs/testrunner-1.0-SNAPSHOT.jar', 
      'libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
    instrumentTestCompile 'org.hamcrest:hamcrest-all:1.3' 
    instrumentTestCompile 'com.google.guava:guava:15.0' 
} 

लेकिन यह मुझे स्थिर प्रारंभिकरण के संबंध में एक त्रुटि देता है। यह डैगर के संबंध में एस्प्रेसो ढांचे में कुछ स्थैतिक प्रारंभिक कोड के कारण होता है। तो उपकरण के लिए डैगर निर्भरताओं को जोड़ने के बाद टेस्टकंपाइल मुझे ऊपर वर्णित IllegalAccessError मिलता है।

किसी के पास आपकी परियोजना में डैगर और एस्प्रेसो परीक्षण करने सहित भाग्य है?

उत्तर

11

काफी समय लगा लेकिन मुझे अंततः यह काम मिल गया।

  1. तो जैसे मेरी निर्भरता घोषित: मैं निम्नलिखित करना पड़ा से here

  2. dependencies { 
        compile 'com.android.support:appcompat-v7:+' 
        compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
        compile 'com.squareup.dagger:dagger:1.1.0' 
    
        instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar','libs/testrunner-1.0-SNAPSHOT.jar','libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
        instrumentTestCompile files('libs/hamcrest-core-1.1.jar', 'libs/hamcrest-library-1.1.jar', 'libs/hamcrest-integration-1.1.jar') 
        instrumentTestCompile 'com.google.guava:guava:14.0.1' 
    } 
    
  3. कॉपी hamcrest जार इस तरह जार से लाइसेंस फ़ाइलें निकालें (या अन्यथा आपको डुप्लिकेट LICENSE.txt फ़ाइलों के बारे में एक त्रुटि मिलेगी)

    zip -d hamcrest-core-1.1.jar LICENSE.txt 
    zip -d hamcrest-library-1.1.jar LICENSE.txt 
    
  4. भागो Gradle connectedCheck

कुछ बातें ध्यान रखें:
- Hamcrest 1.3 मेरे लिए काम नहीं किया, मिला एक मिलान करने वाले के बारे में त्रुटि याद आ रही थी - पागल कितने हुप्स मैं के माध्यम से कूद करने के लिए किया था यहाँ लाने के लिए।
- एंड्रॉइड स्टूडियो के साथ अच्छी तरह से खेलने के लिए यह शुभकामनाएं।

+1

आपको लगता है कि वे केवल समय पैकेज एस्प्रेसो को एक .aar के रूप में ले सकते हैं .... – jophde

+0

हाँ या बस इसे मैवेन सेंट्रल में डालें ताकि हम इसे हर किसी की तरह शामिल कर सकें अन्य निर्भरता। कितना दर्द! मैं अब परीक्षण-किट से प्यार कर रहा हूं कि यह काम करता है लेकिन इसे काम करने के लिए एक दुःस्वप्न था! –

+1

मैं ग्रहण का उपयोग करता हूं और यह मेरी मदद नहीं करता है। – Viacheslav

0

ठीक है, तो मैं घंटों के लिए इस समस्या से निपटने की है, और यहाँ मेरे ठीक है: अपने build.gradle की निर्भरता में इस रखो

compile(project(':commons:statemachine')) { 
    exclude module: 'junit' 
    exclude module: 'json' 
    exclude module: 'guava' 
} 

compile 'com.google.guava:guava:15.0' 
instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT-bundled.jar') 
instrumentTestCompile 'com.squareup:fest-android:1.0.+' 

में एस्प्रेसो बंडल जार जोड़े आपके परीक्षण के libs फ़ोल्डर। अब महत्वपूर्ण हिस्सा आता है।

Winpress या समकक्ष के साथ एस्प्रेसो बंडल जार खोलें और कॉम/फ़ोल्डर पर जाएं, फिर डी एंड्रॉइड फ़ोल्डर का चयन करें और इसे हटाएं। अब WinRar को बंद करें और संकलित करें और अपना परीक्षण चलाएं :-)

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