2012-03-27 204 views
11

我遇到了测试我的android应用程序的问题。
我有2个testCase类,如果我单独执行它们,没有问题,测试运行直到结束。但是,如果我做我的测试项目“右键”,选择“运行方式Android的JUnit测试”我有一个消息测试运行失败:由于'进程崩溃'导致测试运行失败。当测试多个Android活动

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:

第一测试类

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 e用户数据“,当我启动我的模拟器时,如果我执行两个测试,则会有相同的消息。
哦,顺便说一下,在模拟器下的Android 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

确保被测试的这两个活动可以在实际应用下正确启动(即没有runTime异常泄露)。看看你是否能从Logcat得到更多有趣的消息。 – yorkw 2012-03-28 00:32:06

+0

嗨,感谢您的评论,仪器仪表下的两项活动在应用程序中正常启动。当我执行应用程序时,没有例外。如果我分开执行这两个测试,没有例外,只有当我同时执行两个testClass时才会发生异常 – 2012-03-28 07:14:03

+0

当您收到此消息时,Logcat中应该显示更多详细信息_Instrumentation运行失败,原因是“进程崩溃”。 '_显示在控制台中。发布您的Logcat将有助于调查您的问题。 – yorkw 2012-03-28 09:48:40

回答

4

我用得到这个错误当我在我的测试活动的onFinish使用System.exit(0)象下面这样:

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

    } 

所以,请检查您的主要活动的onFinish方法。

1

我也遇到过这个错误。但是,我最终发现我的测试套件已经运行,唯一的问题是我的测试代码中的断言失败。

我查看了LogCat并过滤掉了那些标记为“TestRunner”的消息,并在其他测试日志中发现了断言失败消息。

1

我在运行我的安卓工具时也遇到了类似的问题。最终我最后得出结论,问题是System.exit(0)。现在

,究其原因,为什么它会导致问题 根据其文档

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

System.exit(0)被执行这个代码后编写的所有其他代码被跳过,活动类获取最终确定并收集垃圾收集。由于Instrumentation依赖活动生命周期方法,因此活动类是垃圾收集,如果对象本身不存在,则没有机会调用其方法。

因此,如果您想对应用程序执行单元测试,请避免使用System.exit(0),而应使用finish()方法。

0

如果其他人也在使用Robotium并看到错误:我忘记了tearDown已打开的活动,并且导致上述错误。

public void tearDown() throws Exception { 
    solo.finishOpenedActivities(); 
} 
相关问题