Jacoco converting coverage.ec to reports without coverage.em

sri picture sri · Mar 13, 2015 · Viewed 9k times · Source

I was able to get the code coverage report by following the steps below,

  1. Enable coverage on the build type you want (e.g. debug)

    buildTypes { debug { testCoverageEnabled true } }

  2. Apply Jacoco plugin and set version

    apply plugin: 'jacoco' jacoco { version "0.7.1.201405082137" }

  3. Run

    ./gradlew createDebugCoverageReport

  4. All the tests in connectedAndroidTest are run and coverage report is generated based on them. I can find the coverage reports in

    app/build/outputs/reports/coverage/{buildType}/index.html

and a coverage.ec file in

app/build/outputs/code-coverage/connected/coverage.ec

But no jacoco.exec since I am running from Android Instrumentation instead of Robolectric test cases.

And when I run the instrumentation from ADB ( I guess this is still using Emma ) as follows, I get a coverage.ec file as follows,

$ adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec com.sample.helloworld.test/.Runner
....
OK (4 tests)

Generated code coverage data to /sdcard/coverage.ec

But I am not able to convert the coverage.ec to report using emma since the coverage.em file is missing,

java -cp ~/adt-bundle-mac-x86_64-20130729/sdk/tools/lib/emma_device.jar emma report -r html -in \
coverage.em,myFile.ec,myapp_coverage1.ec -sp /path/to/myapp/src

Is there a way around this problem??

Answer

Carlos Herrera Muñoz picture Carlos Herrera Muñoz · Sep 29, 2015

Simply use the "coverage.ec" as the ".exec" file, it's worked for me

This is what Google did in Android Gradle Plugin source code.

public static final String FILE_COVERAGE_EC = "coverage.ec";

in SimpleTestCallable.java under com.android.builder.internal.testing package.