我正在尝试按照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}
那么......我做错了什么?
答案 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)
要使用gradlew [About]
从命令行运行所有测试JUnit测试
./gradlew test
./gradlew :<moduleName>:test<variantName>UnitTest
仪器测试
./gradlew connectedAndroidTest
./gradlew :<moduleName>:connected<variantName>AndroidTest