Как вы устанавливаете покрытие кода Scala специально для интеграционных тестов? - PullRequest
0 голосов
/ 11 сентября 2018

Я запускаю интеграционный тест, используя следующую команду sbt

sbt clean cover it: test coverReport

Эта команда запускает интеграционные тесты, обрабатывает их и также создает отчет.,

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

0 голосов
/ 15 сентября 2018

Следующие два обходных пути работают на моем компьютере (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 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 бросков Coverage minimum was not reached.Обратите внимание, что после выполнения itTestWithMinCoverage state отбрасывается, поэтому coverageMinimum должно вернуться к значению по умолчанию и, таким образом, не повлиять на юнит-тесты.

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

...