Ответ 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.