是否可以在不运行'sbt clean'的情况下运行Scala SBT Scoverage

时间:2017-04-07 13:09:55

标签: scala sbt scoverage

如果可以利用sbt增量编译并避免每次运行测试时都必须重新编译整个项目,这将是很好的,这正是{I} 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

1 个答案:

答案 0 :(得分:0)

我要复制对此问题发表的评论:

通过Mateusz Kubuszok:

  

根据我的经验,这正是覆盖范围的问题-在覆盖检测期间,它仅注意到以某种方式受影响的部分代码。如果清理,它将衡量整个代码的覆盖率。如果之后再重复测量,它只会在...上进行测量……我想零件会被增量编译所影响。

通过Grzegorz Slowikowski:

  

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