Как вы накладываете покрытие кода scala специально для тестов интеграции?

Запустите интеграционный тест, используя следующую команду 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

Ответ 1

На моей машине работают следующие два обхода (sbt-scoverage 1.5.1, sbt 1.1.1, scala 2.12.5)

inConfig 1 - Использовать inConfig для охвата конфигурации:

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

Теперь выполняем sbt clean coverage it:test it:coverageReport throws 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)

Теперь выполнение sbt itTestWithMinCoverage throws Coverage minimum was not reached. Примечание после выполнения itTestWithMinCoverage state отбрасывается, так что coverageMinimum должно возвращаться к значению по умолчанию и, таким образом, не влияет на модульные тесты.

Похоже, проблема заключается в том, что (помимо того, что я не понимаю, как работают области действия) checkCoverage выбирает значение по умолчанию для coverageMinimum checkCoverage даже после установки coverageMinimum in IntegrationTest.