adi*_*ikh 15 scala code-coverage sbt scoverage
我正在使用以下sbt命令运行集成测试
sbt clean cover it:test coverageReport
此命令运行集成测试,检测它并生成报告.
Build.sbt有以下内容:
coverageMinimum in IntegrationTest := 21.0
coverageFailOnMinimum in IntegrationTest := true
Run Code Online (Sandbox Code Playgroud)
输出如下:
[info] Statement coverage.: 20.16%
[info] Branch coverage....: 12.00%
[info] Coverage reports completed
[info] All done. Coverage was [20.16%]
Run Code Online (Sandbox Code Playgroud)
输出结果具有20.16%的代码覆盖率,但build.sbt中的限制未强制执行限制.
如果我将build.sbt更改为以下它的工作原理:
coverageMinimum := 21.0
coverageFailOnMinimum := true
Run Code Online (Sandbox Code Playgroud)
想要知道我为指定专门针对集成测试的限制而遗漏了什么
版本信息:
sbt:0.13.17
sbt-scoverage:1.5.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))
Run Code Online (Sandbox Code Playgroud)
现在执行sbt clean coverage it:test it:coverageReportthrows Coverage minimum was not reached。
解决方法 2 - 修改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)
Run Code Online (Sandbox Code Playgroud)
现在执行sbt itTestWithMinCoveragethrows Coverage minimum was not reached。注意执行后itTestWithMinCoverage的state被丢弃所以coverageMinimum应该回到默认值,因此不会影响到单元测试。
看来问题是(除了我缺乏了解如何作用域正好工作)checkCoverage拿起的默认值coverageMinimum即使设置coverageMinimum in IntegrationTest。
| 归档时间: |
|
| 查看次数: |
420 次 |
| 最近记录: |