Как запустить и скомпилировать точно один тест в SBT? - PullRequest
2 голосов
/ 08 октября 2019

Я работаю над старым проектом, который был написан на Scala с использованием SBT. Модульные тесты были написаны с ScalaTest. Проблема в том, что во многих классах тестов есть ошибка компиляции.

Я хочу запустить только один из этих классов тестов и знаю, что для запуска только одного теста я должен попробовать что-то вроде этого:

test:testOnly *myClass

Но когда я запускаю эту команду, SBT попытается скомпилировать весь проект, и, как я уже сказал, есть много тестовых классов, которые имеют ошибку компиляции. Есть ли способ точно сказать SBT, какие классы должны быть скомпилированы, и поэтому другие будут игнорироваться?

Ответы [ 3 ]

1 голос
/ 09 октября 2019

У вас, как указано выше, есть следующий параметр:

  • sbt testOnly *className: он будет запускать все тесты, определенные в этом классе.
  • sbt testOnly *className-- -z "test-pattern": он будет запускать всетесты из этого класса, спецификация которых соответствует определенному шаблону.
1 голос
/ 08 октября 2019

Рассмотрите возможность определения настраиваемой команды с одним аргументом в build.sbt, например,

commands += Command.single("compileAndTestOnly") { (state, file) =>
  s"""set sources in Test := (sources in Test).value.filter(_.name.contains("$file"))""" ::
    "test" :: state
}

Теперь запустите ее с compileAndTestOnly MySpec.scala. Эта команда изменяет настройку Test \ sources так, чтобы она содержала только один файл, например

sources in Test := (sources in Test).value.filter(_.name.contains(file))

Примечание sources in Compile остается без изменений. После этого он выполняет test, который фактически компилирует и запускает один тест.

Этот ответ основан на 0 __ .

0 голосов
/ 11 октября 2019

Невозможно дать команду sbt только скомпилировать файл, содержащий тест, соответствующий вашему имени, потому что он будет знать только, какое имя имеет тест после его компиляции - в scala имя класса, а имя файла - нет. должен иметь какое-либо отношение к другому.

Фильтр источника не встроен в sbt. Вам понадобится пользовательское задание в соответствии с тем, что есть у @ mario-galic.

Остерегайтесь, однако, это будет фильтровать по имени файла, а не по имени класса.

Я согласен, что sbt будет удобной возможностью запускать все тесты, которые он может, даже когда компиляция некоторыхфайлы должны были потерпеть неудачу.

...