android.util.AndroidException:INSTRUMENTATION_FAILED:

时间:2013-01-11 00:20:32

标签: android instrumentation

我有一个简单的Android应用程序,我正在使用我的手机进行测试。因此,有两种方法可以做到这一点:

  1. 使用eclipse
  2. 使用CLI
  3. 问题:

    当我使用Eclipse运行单元测试用例时,它会在运行时在我的手机上安装应用程序并运行junit test,之后如果我在CLI上使用命令: adb -d shell am instrument -w com.abc.xyz.test / android.test.InstrumentationTestRunner,运行正常。

    但是,如果我在CLI中直接运行上面的命令而没有先在Eclipse中运行单元测试用例,我就会收到错误:

    android.util.AndroidException: INSTRUMENTATION_FAILED: com.abc.xyz.test/android.test.InstrumentationTestRunner
            at com.android.commands.am.Am.runInstrument(Am.java:586)
            at com.android.commands.am.Am.run(Am.java:117)
            at com.android.commands.am.Am.main(Am.java:80)
            at com.android.internal.os.RuntimeInit.finishInit(Native Method)
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:263)
            at dalvik.system.NativeStart.main(Native Method)
    INSTRUMENTATION_STATUS: id=ActivityManagerService
    INSTRUMENTATION_STATUS: Error=Unable to find instrumentation target package: com.abc.xyz
    INSTRUMENTATION_STATUS_CODE: -1
    

    AndroidMAnifest.xml包含:

        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.abc.xyz" 
    
        inside instrumentation tag
    

    有人可以帮助我吗

3 个答案:

答案 0 :(得分:26)

我想你将从1月开始解决它,但我使用命令行工具,发现类似问题(错误信息不同)并解决它,就像我在下面的步骤中解释一样。我从创建一个空项目的虚拟项目到成功的测试运行完成整个过程。我希望它对某人有用:

第一步,创建项目:

android create project 
  --name MyExample 
  --target "Google Inc.:Google APIs:17" 
  --path MyExample 
  --package com.example 
  --activity MyExampleActivity

第二步,创建测试项目:

android create test-project 
  --path MyExampleTest 
  --name MyExampleTest 
  --main ../MyExample

第三步,访问您的项目目录,构建它并检查流程是否成功结束:

cd MyExample && ant debug

第四步,将其安装到模拟器:

adb -s emulator-5554 install -r bin/MyExample-debug.apk

第五步,访问您的测试项目目录并尝试运行测试:

cd ../MyExampleTest && 
adb shell am instrument -w com.example.tests/android.test.InstrumentationTestRunner

产量:

INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.example.tests/android.test.InstrumentationTestRunner}
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED: com.example.tests/android.test.InstrumentationTestRunner
        at com.android.commands.am.Am.runInstrument(Am.java:676)
        at com.android.commands.am.Am.run(Am.java:119)
        at com.android.commands.am.Am.main(Am.java:82)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)
        at dalvik.system.NativeStart.main(Native Method)

第六步,列出您的检测条款并确保您当前的项目丢失:

adb shell pm list instrumentation

在我的机器中产生:

instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test)
instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test)
instrumentation:com.android.example.spinner.tests/android.test.InstrumentationTestRunner (target=com.android.example.spinner)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)

如您所见,com.example.tests的工具不存在,因此我们必须创建它。

第七步,构建测试项目并检查它是否成功:

ant debug

Eigth step ,将其安装到模拟器:

adb -s emulator-5554 install -r bin/MyExampleTest-debug.apk

第九步,列出您的检测类并查找您的项目之一:

adb shell pm list instrumentation

产量:

instrumentation:com.android.emulator.connectivity.test/android.test.InstrumentationTestRunner (target=com.android.emulator.connectivity.test)
instrumentation:com.android.emulator.gps.test/android.test.InstrumentationTestRunner (target=com.android.emulator.gps.test)
instrumentation:com.android.example.spinner.tests/android.test.InstrumentationTestRunner (target=com.android.example.spinner)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.android.smoketest.tests/android.test.InstrumentationTestRunner (target=com.android.smoketest)
instrumentation:com.example.tests/android.test.InstrumentationTestRunner (target=com.example)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)

看倒数第二个,instrumentation:com.example.tests,这是我们想要的。

第十步,运行测试:

adb shell am instrument -w com.example.tests/android.test.InstrumentationTestRunner

产量:

Test results for InstrumentationTestRunner=
Time: 0.0

OK (0 tests)

就是这样。现在实现您的测试,像往常一样编译和安装。此外,您可以删除它们,如:

adb shell pm uninstall com.example.tests

但是您需要再次创建检测类以避免相同的错误。

答案 1 :(得分:2)

更精确的解释/方法如下:

确保你

adb install -r bin/<>-debug.apk 

来自测试和app目录的两者

之后ant test应该从tests目录开始工作。 (我的猜测是,测试包中缺少对应用程序的依赖 - 导致失败)。

除了上面的小黑客之外,我所遵循的其余程序来自http://developer.android.com/上的android测试介绍。

答案 2 :(得分:1)

确保卸载以前的应用程序,并在卸载上一个应用程序后重新安装或启动测试