web-dev-qa-db-ja.com

android)でEMMAコードカバレッジを使用する方法

私はEMMAを初めて使用しますが、これをAndroidシステムに使用する方法がわかりません。Androidでこれを使用するためのサンプルを教えてください。どうもありがとうございました。

23
Narendra

私はantを使ってemmaを動作させることしかできませんでした。 antビルドを設定している場合は、次を実行できます。

ant emma debug install
ant emma debug install test

1つ目はプロジェクトディレクトリで実行され、2つ目はテストディレクトリから実行されます。詳細については、ドキュメントを参照してください: 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>
9
Grimmace

どうやらEMMAはまだSDKでサポートされていません。ソースツリーの一部であるアプリとテストでのみサポートされます。 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#

8
plainjimbo

プロジェクトにMavenを使用している場合は、ルート化されたデバイスを使用するとかなり簡単です。このwikiを確認してください。

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

レポートの生成とは別にソリューションを実装するのは簡単でしたが、wikiのコメントを確認すると、ソリューションが見つかります。

1
Luigi Agosti