我继承了一个
android项目来设置代码覆盖率.没有为
Android做太多事情,而且几乎没有做太多的事情,我开始寻找一个有用的教程.令人惊讶的是,前几个教程非常有用,我能够包含jacoco gradle插件并启用代码覆盖.使用jenkins我甚至生成了一份报道报告.到目前为止一切都很好.
然而,在看到报告时,我闻到了一些可疑的东西.测试与覆盖率似乎太小了.进一步的调查揭示了罪魁祸首.
测试本身更多地是作为功能而非单元编写的.那没关系.但是,项目库的模块中没有测试.相反,库测试是在gui模块中编写的(因为这是使用库的地方).
因此,即使测试涵盖了大多数库功能,也仅为gui模块的内容生成coverage.
Project
— Gui module
—- gui sources
—- all the tests
— Library module
—- library sources
不,我一直在寻找一个有效的解决方案.不幸的是,我能够找到的是如何将单元和集成.exec测试覆盖结果组合成一个报告(或其他基于单元测试的解决方案 – 其中没有一个适用于仪器测试).
因为我在这里的黑暗中磕磕绊绊,甚至是那样的东西,远远可能吗?
解决方法
对于读这篇文章的人来说……如果你有同样的问题,是时候开始敲打你的头了……
今天我很幸运地偶然发现了这个:https://issuetracker.google.com/issues/37004446#comment12
实际的“问题”似乎是,库项目“始终”是发布类型.因此,它们不包含“必要的仪器设置”(除非您为发布启用代码覆盖,尽管我还没有对其进行测试).
所以解决方案是在要发布的库中专门启用“debug”构建(如上所述,默认是发布类型):
android { publishNonDefault true }
然后,在使用库的项目中,指定debugCompile依赖项(发布编译可以使用“默认”发布配置):
dependencies { debugCompile project(path: 'library',configuration: 'debug') releaseCompile project('library') }
当然(我认为这是理所当然的),请记住为库启用测试覆盖:
android { buildTypes { debug { testCoverageEnabled true } } }