7

如果可以利用 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
4

1 回答 1

0

我将复制有关此问题的评论:

马特乌什·库布佐克:

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

通过 Grzegorz Slowikowski:

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

于 2018-12-11T23:46:18.543 回答