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

标签 scala sbt scoverage

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

最佳答案

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

通过 Mateusz Kubuszok:

From my experience that is exactly the problem with scoverage - during coverage instrumentation it only notices parts of code affected in some way. If you clean it will measure coverage on whole code. If you repeat measurement after that, it will only measure on... I guess parts touched by incremental compilation.



作者 Grzegorz Slowikowski:

SBT compilation is incremental, Scoverage uses a sequence to identify statements it instruments. This sequence is not stored anywhere, it's being reset on every compilation. For incremental compilation different statements would reuse the same first sequence numbers (1, 2, 3, ...) and it would lead to inconsistent scoverage data. Maybe it would be possible to store and reuse the sequence in subsequent builds, but nobody tried it.

关于scala - 是否可以在不运行 'sbt clean' 的情况下运行 Scala SBT Scoverage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43279047/

相关文章:

scala - Slick update 返回更新后的对象

scala - sbt 取决于 % "compile->compile;test->test"

scala - 将 sbt 工件发布到文件系统,并在 ~/.sbt/repositories 文件中指定解析器

intellij-idea - 在 IntelliJ IDEA 中使用 Play 调试 SBT 项目

scala - NoClassDefFoundError 使用 scoverage 插件在 SBT 中运行测试

java - 在 java 中使用单独的测试项目的 Scala 的代码覆盖率

scala - 为 Object 的上下文边界提供隐式证据

scala - 改变类状态的惯用方式

scala - 使用SBT复制资源

scala - 从intellij运行scoverage