【问题标题】:How to use EMMA code coverage in android如何在android中使用EMMA代码覆盖率
【发布时间】:2011-02-15 07:13:19
【问题描述】:

我是 EMMA 的新手,我不知道如何将它用于 android 系统。 任何人都可以提供一个在android中使用它的示例。 非常感谢。

【问题讨论】:

    标签: android testing code-coverage metrics


    【解决方案1】:

    SDK 尚不支持 EMMA。它仅支持作为源树一部分的应用程序和测试。这看起来很奇怪,因为他们在开发指南中没有提到这一点,他们告诉您有关 EMMA 检测选项的信息。 http://developer.android.com/guide/developing/testing/testing_otheride.html#AMOptionsSyntax

    您可以阅读此人的回复(他似乎在开发团队中?我不知道) http://groups.google.com/group/android-developers/msg/a542afd318832371

    如果您想下载并构建 Android 源代码,让 EMMA 为您自己的应用程序工作听起来是可行的。然而,这听起来有点棘手,可能有点不稳定。有关更多信息,请参阅完整线程: http://groups.google.com/group/android-developers/browse_thread/thread/43cf8a8ca5662f85/9b68eec3e7b625f3?lnk=gst&q=Emma#

    【讨论】:

    • 我不知道这个答案是否仍然有效。它是 2 年前写的,我相信当时 android 2.0 仍处于测试阶段
    【解决方案2】:

    我只能使用 ant 让 emma 工作。如果您已经设置了 ant 构建,那么您可以运行:

    ant emma debug install
    ant emma debug install test
    

    第一个在您的项目目录中运行,第二个在您的测试目录中运行。有关详细信息,请参阅文档:http://developer.android.com/guide/developing/building/building-cmdline.html

    如果您还没有 ant build.xml 文件,您可以在此处查看如何从当前项目生成一个:http://developer.android.com/guide/developing/projects/projects-cmdline.html

    可悲的是,这只适用于模拟器或有根设备。这是因为覆盖文件是在需要 root 的文件夹中生成的。我还需要修改 android-sdk/tools/ant/build.xml 文件以将我的根设备上的文件复制到其他地方,这样我就可以将其关闭。我将 xml 的 emma 块修改为如下:

        <if condition="${emma.enabled}">
            <then>
                <echo>WARNING: Code Coverage is currently only supported on the emulator and rooted devices.</echo>
                <run-tests-helper emma.enabled="true">
                    <extra-instrument-args>
                        <arg value="-e" />
                           <arg value="coverageFile" />
                           <arg value="${emma.dump.file}" />
                    </extra-instrument-args>
                </run-tests-helper>
                <echo>Copying coverage to readable directory...</echo>
                <exec executable="${adb}" failonerror="true">
                    <arg line="${adb.device.arg}" />
                    <arg value="shell" />
                    <arg value="echo cp ${emma.dump.file} /sdcard/coverage.ec | su" />
                </exec>
                <echo>Downloading coverage file into project directory...</echo>
                <exec executable="${adb}" failonerror="true">
                    <arg line="${adb.device.arg}" />
                    <arg value="pull" />
                    <arg value="/sdcard/coverage.ec" />
                    <arg value="coverage.ec" />
                </exec>
                <echo>Extracting coverage report...</echo>
                <emma>
                    <report sourcepath="${tested.project.absolute.dir}/${source.dir}"
                                      verbosity="${verbosity}">
                        <!-- TODO: report.dir or something like should be introduced if necessary -->
                        <infileset dir=".">
                            <include name="coverage.ec" />
                            <include name="coverage.em" />
                        </infileset>
                        <!-- TODO: reports in other, indicated by user formats -->
                        <html outfile="coverage.html" />
                   </report>
                </emma>
                <echo>Cleaning up temporary files...</echo>
                <delete file="coverage.ec" />
                <delete file="coverage.em" />
                <echo>Saving the report file in ${basedir}/coverage/coverage.html</echo>
            </then>
            <else>
                <run-tests-helper />
            </else>
        </if>
    

    【讨论】:

    • 这会覆盖 SDK 文件吗?
    • 它不会覆盖 Android api。只是你的包中的来源。
    【解决方案3】:

    如果您在项目中使用 maven,则使用 root 设备相当简单 检查这个维基:

    http://code.google.com/p/maven-android-plugin/wiki/EmmaMaven

    除了报告生成之外,很容易实施该解决方案 但是如果您检查 wiki 的 cmets,您会找到解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多