3

我设置了 Emma,它曾经对我有用。然后我们对源代码进行了更改,现在它根本不生成coverage.ec。它确实生成coverage.em. 接近测试结束时,它有错误消息:

[exec] INSTRUMENTATION_CODE: 0
[echo] Downloading coverage file into project directory...
[exec] remote object '/sdcard/coverage.ec' does not exist

BUILD FAILED
/var/lib/jenkins/android-sdk-linux_x86/tools/ant/build.xml:1056: exec returned: 1.

build.xml 的第 1056 行是

"{adb}" failonerror="true".

我看到我coverage.em在桌面上确实有,这意味着我的代码已经过检测。

我在 \test 下使用的命令是

ant emma debug install test

这以前对我有用。运行代码覆盖对我来说总是崩溃,通常在单元测试快结束时,但它总能让我得到一些覆盖。现在它崩溃了并且不产生coverage.em.

我也尝试访问/sdcard/,它完全可访问和可写。

这已经阻止了我好几天,任何输入将不胜感激。我也是所有这些 Android、Ant 和 Emma 的新手,所以谢谢!!

更新:我刚刚清理了环境并再次运行了命令。现在也不再生成coverage.em。这告诉我源代码没有被检测。但是我上面使用的命令应该是仪器项目,它的测试项目,安装并开始测试。除了将coverage.ec位置更改为/sdcard/coverage.ec外,我没有更改build.xml中的emma def。这是因为默认情况下它转到 /data/data,而我无权访问此手机上的数据/数据

我正在使用 Android SDK 的 r15 和默认的 build.xml。我只是将coverage.ec的路径更改为/sdcard/coverage.ec。运行检测

 Go to main_project
 $andriod update project -p .
 Go to main_prject\test
 $android update project -m ../ -p .
 To start code code
 $ant emma debug install test

它生成了 main_project-instrumented.apk 和 test_project-debug.apk。两者都已安装,我可以看到它执行测试。

4

2 回答 2

4

您必须先使用 android 命令行工具创建一个测试项目。

创建项目和测试项目

假设您的项目存储在D:\AndroidProject并且您的编程针对 android API 级别 8。首先您使用此命令创建项目:

android update project --path ./ --name blabla~ --target android-8 --subprojects 

然后为测试项目创建一个文件夹并导航到该文件夹​​:

mkdir Android_test
cd Android_test

然后使用以下命令创建android测试项目

 android create test-project --main ../AndroidProject --path ./

带有 emma 覆盖率报告的 Ant 构建(带 root)

执行此命令(来自 jenkins 选择和构建步骤)以使用 emma 报告完成构建:

ant emma debug install test

注意:为此,您必须连接有根设备或模拟器,然后执行 ant 命令!

更改构建 xml 文件(因此不需要 root)

如果您不想根植您的设备,另一种解决方案是更改这些覆盖率报告的位置。为此,您应该修改 build.xml 文件。

(您应该在谷歌上搜索以获取更多信息,此处简要说明)

打开 build.xml -> 找到coverage.ec存储文件的位置。在大多数情况下,这将存储在/data/data/com.example.Android/coverage.ec

这里的问题是/data/data/~~~路径受到保护(因此需要根)。

无论如何~你可以coverage.html在你的测试项目文件夹/bin中得到一个文件。接下来的步骤将说明如何更改此设置以保存此文件/sdcard

您可以打开build.xml文件,在最后一行 ~ 您可以找到命令import ~~~ build.xml,这意味着您的 build.xml 文件将导入另一个 build.xml 文件。

另一个 build.xml 文件是 android SDK 的一部分,位于${Android-sdk}/tools/ant/build.xml.

build.xml 文件所需的更改

我们无法更改此文件(不会遇到麻烦),因此请将完整文件复制到其他位置或直接复制到您的项目 build.xml 文件中。

无论您选择做什么,都不要忘记调整或更改 build.xml 文件中的导入语句。

这是您需要在新的 build.xml 文件中更改的内容:

  • 擦除import= ~~build.xml
  • 删除第一行是xml=ejkwjkw?e jw ""project = "android_rule"~~ ~blabla)
  • 最后一行/project
  • 更新地址为/sdcard/coverage.ec

然后,就可以得到coverage.ec文件了~

于 2012-10-25T04:53:47.240 回答
2

我在将我的 SDK 更新到 r16 后遇到了这个问题:Emma code coverage not working in r15 of tools

这为我修复了它:

ant all clean emma debug install test

但我不确定你是否有同样的问题。

我无权访问此手机上的数据/数据

它是非root设备吗?请注意,构建说:

WARNING: Code Coverage is currently only supported on the emulator and rooted devices.

也许您无法通过仅更改覆盖文件的位置来解决此限制。它可以在虚拟设备上运行吗?

于 2012-01-01T22:25:03.503 回答