2011-04-06 19 views
28

के माध्यम से नहीं किया जा सकता है मुझे हाल ही में जारी किए गए फ्रैगमेंट समर्थन API का उपयोग करने वाले एंड्रॉइड एप्लिकेशन के विरुद्ध एंड्रॉइड यूनिट परीक्षण निष्पादित करने में समस्या है। जब परीक्षण एक FragmentActivity के खिलाफ चलाया जाता है तो निम्न त्रुटि लॉग में दिखाई देती है और कक्षा लोड करने में विफल रहता है। एक समान वर्ग के खिलाफ दौड़ते समय, लेकिन गतिविधि से प्राप्त एक परीक्षण परीक्षण ठीक काम करता है। दोनों कक्षाएं ऐप्स के रूप में सही तरीके से काम करती हैं! मतलब यह है कि जब बस बुलाया जाता है तो वे दोनों अपना लेआउट प्रदर्शित करते हैं और सही ढंग से कार्य करते हैं। समर्थन जार बिल्ड पथ का हिस्सा है और परियोजना में शामिल है।फ्रैगमेंट एक्टिविटी का परीक्षण ActivityInstrumentationTestCase2

मेरी समस्या यह है कि टुकड़ों का उपयोग करने का एकमात्र तरीका (और प्री 3.0 एंड्रॉइड का समर्थन) FragmentActivity का उपयोग करना है, लेकिन यदि यह स्वचालित परीक्षण को छोड़ देता है तो यह पुस्तकालय कितना अच्छा है।

4-05 18:00:11.276: WARN/dalvikvm(1095): Class resolved by unexpected DEX: Lcom/example/android/app/FragmentLayoutSupport;(0x406351a0):0x12e5c8 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0x406351a0):0x12e440 
04-05 18:00:11.276: WARN/dalvikvm(1095): (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification) 
04-05 18:00:11.286: WARN/dalvikvm(1095): Unable to resolve superclass of Lcom/example/android/app/FragmentLayoutSupport; (49) 
04-05 18:00:11.286: WARN/dalvikvm(1095): Link of class 'Lcom/example/android/app/FragmentLayoutSupport;' failed 
04-05 18:00:11.286: ERROR/dalvikvm(1095): Could not find class 'com.example.android.app.FragmentLayoutSupport', referenced from method com.example.android.app.test.FrameLayoutTest.<init> 
04-05 18:00:11.286: WARN/dalvikvm(1095): VFY: unable to resolve const-class 131 (Lcom/example/android/app/FragmentLayoutSupport;) in Lcom/example/android/app/test/FrameLayoutTest; 

यहां कोड है जिसे मैंने इस मुद्दे को प्रदर्शित करने के लिए बनाया है। के रूप में इस प्रकार है और fragment_layout एक खाली LinearLayout है मैं बनाया है

FrameLayoutTest.java  
public class FrameLayoutTest extends 
      ActivityInstrumentationTestCase2<FragmentLayoutSupport> { 
     public FrameLayoutTest() { 
      super(FragmentLayoutSupport.class); 
     } 

    public void testActivityTestCaseSetUpProperly() { 
     assertNotNull("activity should be launched successfully", getActivity()); 
    } 
} 

दो वर्ग हैं::

FrameLayout.java 
public class FragmentLayout extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_layout); 
    } 
} 

और

FragmentLayoutSupport.java 
public class FragmentLayoutSupport extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_layout); 
    } 
} 

उत्तर

50

परीक्षण का मामला केवल परीक्षण के अंतर्गत वर्ग का दृष्टांत की कोशिश करता है मैंने इस पर आधी रात बिताई, और अंत में एक समाधान मिला। कुंजी पंक्ति है:

04-05 18:00:11.276, (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification). 

समस्या यह है कि एंड्रॉयड-support-v4.jar जो आप अपने परीक्षण परियोजना में उपयोग कर रहे हैं अपने आवेदन परियोजना में है कि एक से अलग है। अपने परीक्षण प्रोजेक्ट से एंड्रॉइड-सपोर्ट-v4.jar के सभी संदर्भों को हटा दें। फिर अपने एप्लिकेशन प्रोजेक्ट प्रॉपर्टी-> जावा बिल्ड पथ-> ऑर्डर और एक्सपोर्ट पर जाएं और इसे निर्यात करने के लिए एंड्रॉइड-सपोर्ट-v4.jar जांचें। अब दोनों परियोजनाएं एक ही पुस्तकालय का उपयोग कर रही हैं, और दल्विक शिकायत नहीं करेंगे।

+5

यही था के लिए क्लिक करें निर्यात आगे स्थित चेक बॉक्स। मैंने डीबग लॉग में उस पंक्ति को देखा, लेकिन उसने मुझे फेंक दिया। मैंने सोचा कि यह कह रहा था कि मैंने एंड्रॉइड-सपोर्ट-v4.jar के विभिन्न संस्करणों का उपयोग किया था, जो मैंने नहीं किया था। मुझे लगता है कि क्या हो रहा है कि प्रत्येक परियोजना के निर्माण के साथ उस जार फ़ाइल के अपने लिंकिंग के परिणामस्वरूप दो विशिष्ट एनकोडेड डीएक्स फाइलें हुईं। हल करने के लिए बहुत मुश्किल और अच्छा है। मैं सभी व्यावहारिक उद्देश्यों के लिए टुकड़ों को त्यागने के लिए लगभग तैयार था, अगर आप समर्थन lib का उपयोग करते हैं तो अवांछित। – securelpb

+1

आप एक जीवन-बचतकर्ता हैं - यह मुझे तीन घंटे के लिए स्टंप कर रहा था। – tomtheguvnor

+5

इसे सही उत्तर के रूप में क्यों स्वीकार नहीं किया गया था? – Bostone

3

किसी भी इंटेलीजे उपयोगकर्ताओं को, जो इस समस्या में पड़ बराबर फिक्स 'परंतु' के रूप में इस के लिए अपनी निर्भरता के दायरे स्थापित करने के लिए है के लिए:

फ़ाइल> परियोजना संरचना> मॉड्यूल> [आपका परीक्षण एप्लिकेशन का चयन करें]> निर्भरता टैब> स्कोप ड्रॉप डाउन में 'प्रदत्त' का चयन करें।

+0

IntelliJ 11.1 पर माइग्रेशन के बाद मेरे परीक्षणों ने काम करना बंद कर दिया। आपका संकेत मदद, धन्यवाद। – jki

+0

जिसने मदद की .. धन्यवाद! – Informatic0re

+0

मैंने इस पृष्ठ पर सभी सुझावों का प्रयास किया है, जिसमें निर्भरता भी शामिल है ...... बिना किस्मत के। गतिविधि परीक्षण "NoSuchMethod" के साथ परीक्षण के तहत गतिविधि को तुरंत चालू करने में विफल रहता है .... :-( –

4

रूपर्ट द्वारा इंटेलिजे उत्तर ने मुझे वहां तक ​​सभी तरह से नहीं मिला। मैंने इसे ग्रहण के जवाब की तरह जार निर्यात करके हल किया।

फ़ाइल> परियोजना संरचना> मॉड्यूल> [आपका मुख्य एप्लिकेशन का चयन करें]> टैब निर्भरता> समर्थन जार

IntelliJ Project Structure

+1

3 घंटे मैं खोज रहा था !!!!!!!!!!! यह इंटेलिज के संस्करण 12 के साथ भी काम करता है – pommedeterresautee

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