2

私の主なプロジェクトはAndroidライブラリです。単体テストを含むテストプロジェクトを作成しました。テストは正常に実行されますが、テストカバレッジを取得するのに苦労しています。カバレッジレポートを生成すると、テストケースのカバレッジのみが取得され、ライブラリのカバレッジは取得されません。つまり、テストの100%が実行されているので、ほぼ100%になります。しかし、それはライブラリのどの部分がテストされたかを知るのに役立ちません。

これは私が現時点でそれを行う方法です:

0) my project looks like this:
myLibraryProject        <- this is my android library project
myLibraryProject/tests  <- this is my android test project

1) build.xml file : (from myLibraryProject/tests directory)
>android update test-project --path . -m ../

2) Modify the ant.properties file :
#tested.project.dir=../
android.library.reference.1=..

3) only then can I run :
ant emma debug install test

手順2)を実行しないと、ライブラリプロジェクトをインストールできないため、手順3)が失敗します。

どんな助けでも本当にありがたいです!

4

1 に答える 1

0

だからここに私が見つけた解決策があります:

テストプロジェクトに新しいbuild.xmlを作成し、android sdk build.xmlファイルから「test」ターゲットをコピーします(私はsdk20プレビュー2バージョンを使用しました)

レポートセクションのライブラリプロジェクトを指すようにソースパスを変更します

これは私が今使っているものです:

 <!-- version-tag: custom -->
 <target name="test" depends="-test-project-check"
            description="Runs tests from the package defined in test.package property">
    <property name="test.runner" value="android.test.InstrumentationTestRunner" />

    <if condition="${project.is.test}">
    <then>
        <property name="tested.project.absolute.dir" location="${tested.project.dir}" />

        <!-- Application package of the tested project extracted from its manifest file -->
        <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
                expression="/manifest/@package" output="tested.project.app.package" />
    </then>
    <else>
        <!-- this is a test app, the tested package is the app's own package -->
        <property name="tested.project.app.package" value="${project.app.package}" />
    </else>
    </if>

    <property name="emma.dump.file" value="/data/data/${tested.project.app.package}/coverage.ec" /> 

    <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 level="info">Downloading coverage file into project directory...</echo>
            <exec executable="${adb}" failonerror="true">
                <arg line="${adb.device.arg}" />
                <arg value="pull" />
                <arg value="${emma.dump.file}" />
                <arg value="coverage.ec" />
            </exec>
            <echo level="info">Extracting coverage report...</echo>
            <emma>
                <report sourcepath="../${source.dir}" verbosity="${verbosity}">
                    <sourcepath>
                      <dirset dir="${basedir}" >
                        <include name="../src" /> 
                        </dirset>
                    </sourcepath>
                    <infileset dir=".">
                        <include name="coverage.ec" />
                        <include name="coverage.em" />
                    </infileset>
                    <html outfile="coverage.html" />
                    <xml outfile="coverage/coverage.xml" />
               </report>
            </emma>
            <echo level="info">Cleaning up temporary files...</echo>
            <delete file="coverage.ec" />
            <delete file="coverage.em" />
            <echo level="info">Saving the report file in ${basedir}/coverage/coverage.html and ${basedir}/coverage/coverage.xml</echo>
        </then>
        <else>
            <run-tests-helper />
        </else>
    </if>
</target>
于 2012-06-01T08:38:11.347 に答える