2012-03-27 9 views
11

मुझे अपने एंड्रॉइड एप्लिकेशन का परीक्षण करने में कोई समस्या है।
मेरे पास 2 टेस्टकेस क्लास है, अगर मैं उन्हें अलग से निष्पादित करता हूं, तो कोई समस्या नहीं है, परीक्षण अंत तक चलते हैं। लेकिन अगर मैं कर अपने परीक्षण परियोजना पर "राइट क्लिक करें" और "के रूप में एंड्रॉयड JUnit परीक्षण चलाएं" मैं संदेशटेस्ट रन विफल: 'क्रैश प्रक्रिया' के कारण इंस्ट्रुमेंटेशन रन विफल रहा। एकाधिक एंड्रॉइड गतिविधि का परीक्षण करते समय

Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554 
[2012-03-27 15:56:27 - matroussedemaquillageTest] Collecting test information 
[2012-03-27 15:56:31 - matroussedemaquillageTest] Test run failed: Instrumentation run failed due to 'Process crashed.' 

मेरे दो testClasses के लिए bellow देखना मिल गया है:

पहले टेस्ट वर्ग

package fr.smardine.matroussedemaquillage.test; 

import android.test.ActivityInstrumentationTestCase2; 
import android.widget.ImageSwitcher; 
import fr.smardine.matroussedemaquillage.EntryPoint; 

public class EntryPointTest extends 
    ActivityInstrumentationTestCase2<EntryPoint> { 

private EntryPoint mActivity; 
    private ImageSwitcher mSwitcher; 

    public EntryPointTest() { 
     super("fr.smardine.matroussedemaquillage", 
       fr.smardine.matroussedemaquillage.EntryPoint.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     super.tearDown(); 
    } 

    public void test2() { 
     assertEquals(2, 2); 
    } 
} 

और दूसरा:

package fr.smardine.matroussedemaquillage.test; 

import android.test.ActivityInstrumentationTestCase2; 
import android.widget.ImageView; 
import fr.smardine.matroussedemaquillage.Main; 

public class MainTest extends ActivityInstrumentationTestCase2<Main> { 

    private Main mActivity; 
    private ImageView btRemplir; 
    private ImageView btPerime; 
    private ImageView btNotes; 

    public MainTest() { 
     super("fr.smardine.matroussedemaquillage", 
       fr.smardine.matroussedemaquillage.Main.class); 
    } 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     super.tearDown(); 
    } 


    public void test1() { 
     assertEquals(1, 1); 
    } 
} 

आप अपने परीक्षण, इतनी जटिल नहीं हैं देख सकते हैं, भले ही मैं "WIP ई उपयोगकर्ता डेटा "जब मैं अपना एमुलेटर लॉन्च करता हूं, तो वही संदेश होता है यदि मैं दो परीक्षण निष्पादित करता हूं।
ओह, वैसे, एमुलेटर एंड्रॉयड 2.1 के अंतर्गत चलाने और यह मेरा AndroidManifest.xml फ़ाइल है:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="fr.smardine.matroussedemaquillage.test" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" /> 

<instrumentation 
    android:name="android.test.InstrumentationTestRunner" 
    android:targetPackage="fr.smardine.matroussedemaquillage" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <uses-library android:name="android.test.runner" /> 
</application> 

</manifest> 

संपादित करें: मेरी लॉग बिल्ली:

I/ActivityManager(64): Start proc fr.smardine.matroussedemaquillage for added application fr.smardine.matroussedemaquillage: pid=510 uid=10029 gids={3003, 1015} 
D/ddm-heap(510): Got feature list request D/dalvikvm(510): GC freed 5427 objects/420224 bytes in 90ms 
D/dalvikvm(510): GC freed 6498 objects/506616 bytes in 79ms 
D/dalvikvm(510): GC freed 7048 objects/567464 bytes in 90ms 
D/dalvikvm(510): GC freed 8628 objects/503840 bytes in 73ms 
I/System.out(510): Failed to open test.properties 
I/AndroidRuntime(510): AndroidRuntime onExit calling exit(-1) – 
D/Zygote(30): Process 510 exited cleanly (255) 
I/ActivityManager(64): Process fr.smardine.matroussedemaquillage (pid 510) has died. 
W/ActivityManager(64): Crash of app fr.smardine.matroussedemaquillage running instrumentation ComponentInfo{fr.smardine.matroussedemaquillage.test/android.test.Instrumentatio‌​nTestRunner} 
D/ActivityManager(64): Uninstalling process fr.smardine.matroussedemaquillage 
D/AndroidRuntime(504): Shutting down VM 
D/dalvikvm(504): DestroyJavaVM waiting for non-daemon threads to exit 
D/dalvikvm(504): DestroyJavaVM shutting VM down 
D/dalvikvm(504): HeapWorker thread shutting down 
D/dalvikvm(504): HeapWorker thread has shut down 
D/jdwp(504): JDWP shutting down net... 
D/jdwp(504): Got wake-up signal, bailing out of select 
I/dalvikvm(504): Debugger has detached; object registry had 1 entries 
D/dalvikvm(504): VM cleaning up 
D/dalvikvm(504): LinearAlloc 0x0 used 643668 of 5242880 (12%) 
I/dalvikvm(504): JNI: AttachCurrentThread (from ???.???) 
E/AndroidRuntime(504): ERROR: thread attach failed' 
+0

सुनिश्चित करें कि परीक्षण के तहत इन दोनों गतिविधियों को वास्तविक एप में उपकरण के तहत ठीक से शुरू किया जा सकता है (यानी कोई रनटाइम अपवाद लीक नहीं है)। जांचें कि क्या आप Logcat से कोई और दिलचस्प संदेश प्राप्त कर सकते हैं। – yorkw

+0

हाय, आपकी टिप्पणी के लिए धन्यवाद, उपकरण के तहत दो गतिविधि ऐप में ठीक से लॉन्च की गई है। जब मैं ऐप निष्पादित करता हूं तो कोई अपवाद नहीं होता है। यदि मैं अलग-अलग दो परीक्षण निष्पादित करता हूं, तो कोई अपवाद नहीं होता है, अपवाद तब होता है जब मैं दोनों टेस्टक्लास को एक ही समय में निष्पादित करता हूं –

+0

लॉगबैक में अधिक विवरण दिखाना चाहिए, जब आपको यह संदेश मिलता है _ प्रक्रिया क्रैश होने की वजह से विफलता चलती है। कंसोल में दिखाया गया _ _। अपने लॉगकैट को पोस्ट करने से आपकी समस्या की जांच में मदद मिलेगी। – yorkw

उत्तर

4

मैं इस त्रुटि मिलती है के लिए इस्तेमाल किया जब मैं नीचे की तरह अपने परीक्षण गतिविधि के onFinish पर System.exit (0) का प्रयोग किया:

@Override 
    public void finish() { 
     super.finish(); 
     System.exit(0); 

    } 

तो अपने मुख्य गतिविधि के onFinish विधि की जाँच करें।

1

मुझे इस त्रुटि का भी सामना करना पड़ा। हालांकि, मुझे लगता है कि मेरा टेस्ट सूट चला गया, एकमात्र समस्या यह थी कि मेरे टेस्ट कोड में एक जोर विफल रहा।

मैंने लॉगकैट में देखा और उन टैग किए गए "टेस्टरुनर" संदेशों को फ़िल्टर किया और अन्य परीक्षण लॉग के बीच दावा विफलता संदेश पाया।

1

मुझे अपने एंड्रॉइड वाद्ययंत्र को चलाने के दौरान भी इसी तरह की समस्या का सामना करना पड़ा। आखिर में मैंने निष्कर्ष निकाला कि समस्या System.exit (0) है।

अब, कारण, कारण है कि यह समस्या का कारण बनता है इसके प्रलेखन के अनुसार

Causes the VM to stop running and the program to exit.

जब System.exit (0) अन्य सभी इस कोड के बाद लिखा कोड का निष्पादित छोड़ रहे हैं और गतिविधि वर्ग हो जाता है अंतिम रूप दिया गया और कचरा इकट्ठा करने के लिए जाओ। चूंकि इंस्ट्रुमेंटेशन गतिविधि जीवन-चक्र विधि पर भरोसा करता है, गतिविधि वर्ग कचरा इकट्ठा होता है, यदि ऑब्जेक्ट स्वयं मौजूद नहीं है तो इसकी विधियों को कॉल करने का कोई मौका नहीं है।

इसलिए यदि आप एप्लिकेशन के यूनिट परीक्षण करना चाहते हैं तो System.exit (0) का उपयोग करने से बचें, फिनिश() विधि का उपयोग करें।

0

यदि कोई और रोबोटियम का उपयोग कर रहा है और त्रुटि देखी है: मैं tearDown खोला गतिविधि भूल गया, और इसके परिणामस्वरूप ऊपर वर्णित त्रुटि हुई।

public void tearDown() throws Exception { 
    solo.finishOpenedActivities(); 
} 
संबंधित मुद्दे