我已经设置了一个Android库项目进行单元测试。为了支持有效的测试,我在我的设置中包含了Robolectric和PowerMockito。这个过程一直很顺利,直到我发现使用Android Studio的内置工具运行覆盖率报告时出现了一些奇怪的行为。
库项目正在使用自定义注释,以便于面向方面的日志记录。它有一个CLASS的RetentionPolicy,以便在编译时将它编织到类中,可用的目标是构造函数和方法(认为我们只是在仪器方法上取得了成功)。
有关此特定配置的一些信息导致Android Studio完全在具有此特定注释的任何方法上跳过coverage集合。这是我到目前为止所尝试的内容:
-Removed annotation(覆盖率报告有效,显然没有记录)
- 将注释的RetentionPolicy更改为SOURCE(覆盖率报告有效,打破面向方面的日志记录)
- 从“采样”到“跟踪”(无效)的代码覆盖方法
- 从Intellij IDEA到JaCoCo的覆盖范围转换器(无效)
- 从注释中删除构造函数目标(无效)
正如您所看到的,我提出的重新启用覆盖范围的唯一解决方案也是中性注释。不可否认,我只是半心半意地试图切换到JaCoCo(我刚刚更改了覆盖运行器并在我的build.gradle中将testCoverageEnabled设置为true,我读过这可能还不够)。还有其他想法吗?自测试开始以来,这不是必然的交易破坏者,但是准确的报道报告会很好。
答案 0 :(得分:1)
非常感谢我提问的评论者。我们面向方面的日志记录代码基于Hugo。允许注入跟踪日志记录的插件不在不可调试的构建变体上运行。
我在库的build.gradle文件中添加了一行类似的代码,并将构建变量切换为" release"。 Intellij的IDEA覆盖率报告成功开始生成以前跳过的代码的覆盖率信息。