【问题标题】:How to force Jacoco to use a specific version in Gradle如何强制 Jacoco 在 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-androidGithub 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 版本,问题出在其他地方。您应该共享特定代码和测试来评估覆盖率问题的根源。

标签: android kotlin gradle jacoco sonarqube-scan


【解决方案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 应该没有那么难。

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多