如何在android中使用EMMA代码覆盖

时间:2010-05-04 03:39:15

标签: android testing code-coverage metrics

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

3 个答案:

答案 0 :(得分:9)

我只能让艾玛使用蚂蚁工作。如果您已经设置了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设备。这是因为覆盖文件是在需要root的文件夹中生成的。我还需要修改android-sdk / tools / ant / build.xml文件,将我的root设备上的文件复制到其他地方,这样我就可以将其关闭。我将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>

答案 1 :(得分:8)

显然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 :(得分:1)

如果您使用maven为您的项目使用root设备相当简单 检查这个维基:

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

除了报告生成之外,很容易实现解决方案 但如果你查看维基的评论,你会找到解决方案