如何强制 Jacoco 在 Gradle 中使用特定版本
Posted
技术标签:
【中文标题】如何强制 Jacoco 在 Gradle 中使用特定版本【英文标题】:How to force Jacoco to use a specific version in Gradle 【发布时间】:2020-11-07 13:11:10 【问题描述】:根据0.8.3 版本中的发行说明,过滤掉了非空断言运算符,我正在使用 Jacoco 0.8.5 版,如下所示:
jacoco
toolVersion = "0.8.5"
但它告诉我Not covered by tests (8 conditions)
我正在使用com.dicedmelon.gradle:jacoco-android
Github link
我认为toolVersion = "0.8.5"
不起作用或类似的东西,因此我需要一种强制 Jacoco 版本的方法。
有没有办法解决这个问题?
【问题讨论】:
配置看起来正确。如果您不确定正在运行哪个版本,在 html 报告的右下角,您可以看到用于生成它的版本Created with JaCoCo 0.8.X
。你检查过哪个值吗?示例:eclemma.org/jacoco/trunk/index.html
@rolgalan 创建于 JaCoCo 0.8.5.201910111838 ????
然后使用 toolVersion 设置器正确应用 jacoco 版本,问题出在其他地方。您应该共享特定代码和测试来评估覆盖率问题的根源。
【参考方案1】:
没有看到你的代码和你的测试,我不能说 100% 有信心,但看起来 Jacoco 工作正常,而且有些情况没有涵盖。
您正在使用!! 3 次。当您使用此运算符时,实际上,您正在创建 2 个流,当变量为空时,另一个用于非空。如果您为变量为空的情况添加测试,您应该达到100% 的覆盖率。
明确地说,如果您使用安全调用来处理您的可空值,您将拥有如下内容:
val token = authResult.user?.let
authenticationDataSource.getIdToken(true, it)
?.let it.token
?: throw GetIdTokenResultIsNullException()
?: throw UserIsNullException()
token?.let
authenticationDataSource.loginBy(AuthenticationPayload(it))
?: throw TokenIsNullException()
无论我在哪里抛出异常,您都应该根据需要处理这种情况,这是由可空性创建的备用分支。
如果您确定您的值不会为 null,那么您应该更改您的类型以使其清晰并避免额外的检查。
附带说明,jacoco-android
似乎不再维护 here 并且它与较新的 gradle
版本不兼容,所以我建议直接使用 Jacoco。从jacoco-android
迁移到jacoco
应该没有那么难。
【讨论】:
以上是关于如何强制 Jacoco 在 Gradle 中使用特定版本的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sonarrunner 和 Gradle 从 Jacoco 报告中排除包
使用Sonarrunner和Gradle从Jacoco报告中排除软件包