从命令行运行android单元测试?
我正试图在android平台上运行单元测试。例如,我想对电子邮件应用程序运行测试。我打开从命令行运行android单元测试?,android,unit-testing,shell,Android,Unit Testing,Shell,我正试图在android平台上运行单元测试。例如,我想对电子邮件应用程序运行测试。我打开/apps/Email/tests/AndroidManifest.xml文件,查找元素,并查看包属性,即com.android.Email.tests,在元素中,我查看android:name属性,即android.test.InstrumentationTestRunner。现在我打开控制台,然后运行 $ . build/envsetup.sh $ lunch 1 $ adb shell am instr
/apps/Email/tests/AndroidManifest.xml
文件,查找
元素,并查看包
属性,即com.android.Email.tests
,在
元素中,我查看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}
所以。。我做错了什么?您可能需要首先使用
android create test project
命令设置测试项目。查看Android开发站点上的这个页面:了解更多信息。我使用此方法启用了ant的命令行测试。我实际上忘记了在我的设备/模拟器上构建和安装测试包。发现在做了以下工作之后:
$ adb shell
# cd data/packages
# ls
没有com.android.email.tests
包。在这种情况下,我收到了“找不到检测信息”错误:我用一个src包名称定义了我的测试项目,该名称与被测试项目的名称相同。例如,这两个项目的源代码都在com.mycompany.android包中。这个并行src包设置在Eclipse中运行良好,但在模拟器上,似乎测试apk正在覆盖appapk
修复:我将测试项目的src包更改为test.mycompany.android
请注意,在任何一种情况下,测试项目的Android清单都定义了:
pm list instrumentation
你应该看到
检测:com.android.email.tests/android.test.InstrumentationTestRunner
(target=com.android.email)
什么时候做
pm list packages
软件包:com.android.email
软件包:com.android.email.tests
我的问题是这个标签:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:label="Tests for app.under.test.package"
android:targetPackage="app.under.test.package" />
首先,我的android:name
属性错误,然后目标包错误(以上是正确的解决方案)模拟器上没有安装测试包
我遇到了完全相同的问题,并且意识到模拟器上没有安装测试包,这就是@marekdef所说的
我没有使用生成的测试文件中的命令,而是使用了以下命令:
ant debug install test
*我在/tests
中有我的测试项目,因此以下命令是我在项目主页目录中使用的命令:
(cd tests && ant debug install test;)
希望对您有所帮助。对于gradle用户,您可以使用以下任务:
$ gradle :project:installDebug :project:installDebugAndroidTest
我有这个
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->执行所有仪表化测试
我刚刚发现eclipse运行并不关心manifest元素是定义package=“pkg of project under test”(这是eclipse在创建新的Android测试项目时插入的值)还是package=“pkg of test project”。为什么我会注意到这一点?好的,eclipse构建似乎关心这个值。当我将第一个活动添加到测试项目并编辑测试清单来描述它时,eclipse开始抱怨在编译我的测试活动时找不到R。将测试项目的包更改为pkg解决了这个问题。应该是
adb shell pm list instrumentation
Yes这些是您在adb shell中执行的命令。Python不在android中,但曾经在测试android的框架中为我工作,我被用于eclipse来创建测试构建,谢谢@科斯波尔很高兴这有帮助!
./gradlew test
./gradlew :<moduleName>:test<variantName>UnitTest
./gradlew connectedAndroidTest
./gradlew :<moduleName>:connected<variantName>AndroidTest
//Unit
./gradlew :<moduleName>:assemble<variantName>UnitTest
//functional
./gradlew :<moduleName>:assemble<variantName>AndroidTest