【问题标题】:Is it possible to run Scala SBT Scoverage without running 'sbt clean'是否可以在不运行“sbt clean”的情况下运行 Scala SBT Scoverage
【发布时间】:2017-09-02 21:25:48
【问题描述】:

如果可以利用 sbt 增量编译并避免每次运行测试时都必须重新编译整个项目,那就太好了,这正是你执行clean 时发生的情况。但以下顺序:

sbt> coverage
sbt> test
sbt> coverageReport

不会重新生成覆盖率报告,但这个会:

sbt> clean
sbt> coverage
sbt> test
sbt> coverageReport

例如,以下序列将始终生成相同的覆盖率报告(即第一次生成的报告):

sbt> coverage
sbt> test
sbt> coverageReport

在这里我更改了我的一个测试文件并再次运行:

sbt> coverage
sbt> test
sbt> coverageReport

【问题讨论】:

  • 项目是否开源,让我们看看?我从来没有意识到这种行为。我通常只对 CI 进行报道,而且我总是很干净,因为我对此有点偏执:)
  • 根据我的经验,这正是覆盖的问题 - 在覆盖检测期间,它只会注意到部分代码以某种方式受到影响。如果你清理它,它将测量整个代码的覆盖率。如果你在那之后重复测量,它只会测量......我猜是增量编译触及的部分。
  • @pedrorijo91 我们将测试覆盖率保持在 100%,因此我想确保在提交之前不会破坏构建。该项目不是开源的,但您可以在任何项目中复制该行为
  • SBT 编译是增量的,Scoverage 使用序列来识别它所检测的语句。这个序列不存储在任何地方,它在每次编译时都会被重置。对于增量编译,不同的语句将重用相同的第一个序列号(1、2、3、...),这会导致覆盖数据不一致。也许可以在后续构建中存储和重用序列,但没有人尝试过。

标签: scala sbt scoverage


【解决方案1】:

我将复制发布在这个问题上的 cmets:

马特乌斯·库布佐克:

根据我的经验,这正是覆盖的问题 - 在覆盖检测期间,它只会注意到部分代码以某种方式受到影响。如果你清理它,它将测量整个代码的覆盖率。如果你在那之后重复测量,它只会测量......我猜是增量编译所触及的部分。

Grzegorz Slowikowski:

SBT 编译是增量的,Scoverage 使用序列来识别它所检测的语句。这个序列不存储在任何地方,它在每次编译时都会被重置。对于增量编译,不同的语句将重用相同的第一个序列号(1、2、3、...),这会导致覆盖数据不一致。也许可以在后续构建中存储和重用序列,但没有人尝试过。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2014-07-04
    • 2021-06-30
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多