【问题标题】:How do you impose scala code coverage specifically for integration tests?您如何专门为集成测试强加 scala 代码覆盖率?
【发布时间】:2019-02-15 09:55:06
【问题描述】:

正在使用以下 sbt 命令运行集成测试

sbt clean coverage it:test coverageReport

此命令运行集成测试、检测它并生成报告。

Build.sbt 有以下内容:

coverageMinimum in IntegrationTest := 21.0
coverageFailOnMinimum in IntegrationTest := true

输出如下:

[info] Statement coverage.: 20.16%
[info] Branch coverage....: 12.00%
[info] Coverage reports completed
[info] All done. Coverage was [20.16%]

输出结果有 20.16% 的代码覆盖率,但 build.sbt 中的限制并未强制执行。

如果我将 build.sbt 更改为遵循它的工作原理:

coverageMinimum := 21.0
coverageFailOnMinimum := true

想知道我在为集成测试指定限制时缺少什么

版本信息:

sbt:0.13.17

sbt-scoverage : 1.5.1

【问题讨论】:

  • 它适用于适当的设置coverageFailOnMinimum,默认情况下恰好没有设置,那又如何?
  • 适当的设置是什么意思?就像在集成范围内定义的相同的两个设置似乎无法识别。我错过了什么?

标签: scala sbt code-coverage scoverage


【解决方案1】:

以下两种解决方法似乎适用于我的机器(sbt-scoverage 1.5.1、sbt 1.1.1、scala 2.12.5)

解决方法 1 - 使用 inConfig 限定配置:

inConfig(IntegrationTest)(ScoverageSbtPlugin.projectSettings),
inConfig(IntegrationTest)(Seq(coverageMinimum := 21, coverageFailOnMinimum := true))

现在执行sbt clean coverage it:test it:coverageReport 会抛出Coverage minimum was not reached

解决方法 2 - 在自定义 command 中修改 coverageMinimum 设置

def itTestWithMinCoverage = Command.command("itTestWithMinCoverage") { state =>
  val extracted = Project extract state
  val stateWithCoverage = extracted.append(Seq(coverageEnabled := true, coverageMinimum := 21.0, coverageFailOnMinimum := true), state)
  val (s1, _) = Project.extract(stateWithCoverage).runTask(test in IntegrationTest, stateWithCoverage)
  val (s2, _) = Project.extract(s1).runTask(coverageReport in IntegrationTest, s1)
  s2
}

commands ++= Seq(itTestWithMinCoverage)

现在执行sbt itTestWithMinCoverage 会抛出Coverage minimum was not reached。注意在执行itTestWithMinCoveragestate 会被丢弃,所以coverageMinimum 应该回到默认值,因此不会影响单元测试。

似乎问题是(除了我不了解作用域的确切工作原理之外)checkCoverage 即使在设置coverageMinimum in IntegrationTest 之后仍会选择coverageMinimum 的默认值。

【讨论】:

  • 我尝试了 inconfig,第一种方法,对我不起作用。有一个旧版本的 scala 然后你的。我为测试和集成测试定义,但它似乎没有阅读它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多