Getting Jacoco to work with Dagger
January 16, 2015Writing tests for your code provides you with a number of development benefits, from proving that your code meets set requirements to ensuring that future code changes don’t introduce bugs or break existing functionality. It’s also important to know how much of your code is covered by your tests and what areas in your code aren’t yet covered.
Jacoco is a framework that creates code coverage reports that show you how much of your code has or has not been touched in your tests. This post is an excellent guide to setting up your Android Gradle project to use Jacoco.
To generate the Jacoco test coverage report, execute the following in the commandline:
./gradlew cleanTest test jacocoTestReport
If you’re using Dagger in your Android Gradle project, you might encounter the following error:
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:jacocoTestReport'. > Error while creating report
To dig deeper into this error, execute the same command with the stacktrace option:
./gradlew cleanTest test jacocoTestReport --stacktrace
In the stack trace, you’ll see an entry similar to this:
Caused by: java.io.FileNotFoundException: /app/build/intermediates/classes/debug/com/yourproject/AndroidModule$ModuleAdapter$ProvideAccountManagerProvidesAdapter.class (No such file or directory) at org.apache.tools.ant.types.resources.FileResource.getInputStream(FileResource.java:217) at org.jacoco.ant.ReportTask.createBundle(ReportTask.java:568) at org.jacoco.ant.ReportTask.createReport(ReportTask.java:547) at org.jacoco.ant.ReportTask.execute(ReportTask.java:494) ... 67 more
Jacoco is expecting to find generated files with a single “$” in their name, but Dagger generates files with “$$” in their name. However, we don’t need to check test coverage in these generated classes, so we can tell Jacoco to ignore these files by adding the following to the “excludes” array (in addition to any existing entries) in the fileTree passed to “classDirectories”, like so:
classDirectories = fileTree( dir: '../app/build/intermediates/classes/debug', excludes: [ '**/*InjectAdapter*.*', '**/*StaticInjection*.*', '**/*ModuleAdapter*.*' ] )
Looking for more like this?
Sign up for our monthly newsletter to receive helpful articles, case studies, and stories from our team.
![Beyond checklists: How product roadmaps drive value in software development](https://gratis-creeper.transforms.svdcdn.com/staging/blog/product-roadmap-thumbnail.jpg?w=1080&h=1080&auto=compress%2Cformat&fit=crop&dm=1721394270&s=fcff68b0979b58b67a12760c3cf57545)
Beyond checklists: How product roadmaps drive value in software development
July 19, 2024In custom software development, the path to success is often complex and somewhat unpredictable. Product roadmaps—living, breathing documents—help us make better value-based decisions. Learn how they lead to software development success.
Read more![Web app vs. mobile app: How to decide which is best for your business](https://gratis-creeper.transforms.svdcdn.com/staging/blog/web-app-mobile-app-thumbnail.jpg?w=1080&h=1080&auto=compress%2Cformat&fit=crop&dm=1711474200&s=38ef83c83587090f160415a80243482f)
Web app vs. mobile app: How to decide which is best for your business
March 26, 2024When considering whether to develop a web app or a mobile app for your business, there’s honestly no definitive answer. But this article will help you make an informed decision that aligns with your business goals and sets you up for success.
Read more![Tech is for everyone](https://gratis-creeper.transforms.svdcdn.com/staging/blog/tech-is-for-everyone-thumbnail.jpg?w=1080&h=1080&auto=compress%2Cformat&fit=crop&dm=1718890605&s=7439be56643f22fd006d53da04c10f1d)
Tech is for everyone
June 20, 2024Have you ever felt like the tech world was an Ivy league school, where only the most elite students gain acceptance? Discover paths into the industry you may not have considered.
Read more