gpt4 book ai didi

scala - 覆盖范围:结合来自测试的覆盖范围和它:测试

转载 作者:行者123 更新时间:2023-12-04 10:13:57 29 4
gpt4 key购买 nike

我用过滤器拆分了单元测试和集成测试:

  lazy val FunTest = config("it") extend Test

def funTestFilter(name: String): Boolean = name endsWith "Spec"

def unitTestFilter(name: String): Boolean = name endsWith "Test"

...
testOptions in Test := Seq(Tests.Filter(unitTestFilter)),
testOptions in FunTest := Seq(Tests.Filter(funTestFilter)),
...

所以我可以做这样的事情:
sbt clean coverage test dockerComposeUp it:test dockerComposeStop coverageReport
可悲的是,这会杀死我所有的 Coverage,只有生成的 BuildInfo有一个覆盖范围。

仅使用 sbt clean coverage test coverageReportsbt clean coverage it:test coverageReport按预期工作。

整个项目可以在这里找到: https://github.com/pme123/play-binding-form

覆盖版本: 1.5.1

最佳答案

SBT 支持增量编译,但 Scoverage 不支持。 Scoverage 在编译开始前清除检测信息,每次都从头开始检测过程。在启用 Scoverage 的情况下编译所有类的子集将导致错误的覆盖率报告。

在这种情况下 sbt-buldinfo插件在 server 中启用模块。注册源码生成器,每次编译前执行,生成server/target/scala_2.12/src_managed/main/sbt-buildinfo/BuildInfo.scala文件。

SBT BuildInfo 插件足够智能,仅在其内容更改时才重新生成此文件,但由于 BuildInfoOption.BuildTime包含在 buildInfoOptions 中环境,
该文件在每次编译之前重新生成。

在编译过程中,编译器每次都会找到一个修改过的文件(BuildInfo.scala),并开始对这个文件进行增量编译。 Scoverage 清除其先前的检测信息并仅保存有关 BuildInfo.scala 的信息文件。

如果执行像 sbt clean coverage test dockerComposeUp it:test dockerComposeStop coverageReport第一个编译过程是 test 的一部分任务,第二个 it:test任务。这就是为什么单独使用它们时没有问题的原因。

Docker 与我们的问题无关。

要解决此问题,您必须阻止 BuildInfo.scala在每次编译时重新生成文件,至少在启用覆盖时。
我通过修改 project/Settings.scala 来做到这一点以这种方式归档:

  private lazy val buildInfoSettings = Seq(

buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, sbtVersion),

buildInfoOptions ++= { if (coverageEnabled.value) Seq() else Seq(BuildInfoOption.BuildTime) }, // <-- this line was changed
buildInfoOptions += BuildInfoOption.ToJson,

buildInfoPackage := "pme123.adapters.version"
)

buildInfoOptions不包括 BuildTime打开覆盖时的选项。

它看起来并不优雅,但它确实有效。您可能会找到更好的方法。

关于scala - 覆盖范围:结合来自测试的覆盖范围和它:测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54349427/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com