从命令行运行android单元测试?

时间:2010-07-21 12:11:49

标签: android unit-testing shell

我正在尝试按照tutorial在Android平台上运行单元测试。比方说,我想运行电子邮件应用程序的测试。我打开/apps/Email/tests/AndroidManifest.xml文件,查找<manifest>元素,然后查看package属性,com.android.email.tests,以及我看到的<instrumentation>元素android:name属性,即android.test.InstrumentationTestRunner。现在我打开控制台,然后运行

$ . build/envsetup.sh
$ lunch 1
$ adb shell am instrument -w com.android.email.tests/android.test.InstrumentationTestRunner

但那失败了:

INSTRUMENTATION_STATUS: id=ActivityManagerService
android.util.AndroidException: INSTRUMENTATION_FAILED: com.android.email.tests/android.test.InstrumentationTestRunner
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.android.email.tests/android.test.InstrumentationTestRunner}

那么......我做错了什么?

9 个答案:

答案 0 :(得分:9)

请跑 python开发/ testrunner / runtest.py电子邮件

然后你会看到它有效:)。

基本上你没有安装com.android.email.tests包。

您可以查看可用于检测的内容

pm list instrumentation

你应该看到

  

仪器:com.android.email.tests / android.test.InstrumentationTestRunner   (目标= com.android.email)

在做的时候

pm list packages
  

包:com.android.email

     

包:com.android.email.tests

答案 1 :(得分:3)

您可能需要先使用android create test-project命令设置测试项目。请查看Android Dev网站上的此页面:Testing In Other IDE's以获取更多信息。我已经使用这种方法来启用命令行测试。

答案 2 :(得分:2)

我实际忘记做的是在我的设备/模拟器上构建和安装测试包。在做完之后发现:

$ adb shell
# cd data/packages
# ls

那里没有com.android.email.tests个包裹。

答案 3 :(得分:1)

我的问题是这个标签:

 <instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:label="Tests for app.under.test.package"
    android:targetPackage="app.under.test.package" />

首先我的android:name属性错误,然后目标包错了(上面是正确的解决方案)

答案 4 :(得分:1)

未在仿真器上安装测试包

我有完全相同的问题,并意识到测试包尚未安装在模拟器上,这就是@marekdef所说的。

我没有使用生成的测试文件中的命令,而是使用了以下内容:

ant debug install test

*我在<project_home>/tests中安装了我的测试项目,因此以下命令是我最终使用的项目主目录目录:

(cd tests && ant debug install test;)

希望有所帮助。

答案 5 :(得分:0)

在这种情况下我收到了“无法找到检测信息”错误:我使用src包名称定义了我的测试项目,该名称与被测试项目的名称相同。例如,两个项目的源都在com.mycompany.android包中。这个parallel-src-package设置在Eclipse中工作得很好,但是在模拟器上,很多时候看起来测试apk正在覆盖app apk。

修复:我将测试项目的src packge更改为test.mycompany.android。

请注意,在任何一种情况下,测试项目的Android清单都定义:

&LT; manifest package =“pkg-of-project-under-test”...&gt;

&LT; instrumentation android:targetPackage =“pkg-of-project-under-test”...&gt;

答案 6 :(得分:0)

对于gradle用户,您可以使用以下任务:

$ gradle :project:installDebug :project:installDebugAndroidTest

答案 7 :(得分:0)

我有这个run_all_test.sh脚本可以运行所有单元测试和仪器测试:

#!/bin/bash
./gradlew --no-daemon clean test connectedCheck --stacktrace;
if [ $? -eq 0 ]
then
    echo "tests are successful"
else
    echo "tests FAILED"
    exit 1
fi

说明:

  
      
  • 测试->执行所有单元测试

  •   
  • connectedCheck->执行所有检测的测试

  •   

您可以根据以下文档从此处开始根据您的需要对其进行自定义:https://developer.android.com/studio/test/command-line

答案 8 :(得分:0)

[Android test types]

要使用gradlew [About]

从命令行运行所有测试

JUnit测试

./gradlew test
./gradlew :<moduleName>:test<variantName>UnitTest

仪器测试

./gradlew connectedAndroidTest
./gradlew :<moduleName>:connected<variantName>AndroidTest