#scala #sbt #scalatest
#scala #sbt #scalatest
Вопрос:
Как я могу указать тест из файла build.sbt, я хотел запустить только один тест, и я использовал фильтр, как в документах sbt, но со мной это не работает, это мой код, у меня есть два тестовых класса, и в моем sbt я указываю test1 как rub, нокажется, что два теста выполняются одновременно, кто-нибудь знает, что я должен делать?
Test1Demo.scala
import org.scalatest.{FlatSpec, Matchers}
class Test1Demo extends FlatSpec with Matchers{
"value of x " should " be 9 " in { assert(my.App.x == 9) }
}
Test2Demo.scala
import org.scalatest.{FlatSpec, Matchers}
class Test2Demo extends FlatSpec with Matchers{
"value of y " should " be 8 " in { assert(my.App2.y == 8) }
}
build.sbt
version := "0.1"
scalaVersion := "2.12.8"
libraryDependencies = "org.scalatest" %% "scalatest" % "3.0.5" % Test
testOptions in Test := Seq(Tests.Filter(s => s.startsWith("Test1")))
вывод :
[info] Done updating.
[info] Compiling 2 Scala sources to /home/****/target/scala-2.12/classes ...
[info] Done compiling.
[info] Compiling 2 Scala sources to /home/****/target/scala-2.12/test-classes ...
[info] Done compiling.
[info] Test2Demo:
[info] value of y
[info] - should be 8
[info] Test1Demo:
[info] value of x
[info] - should be 9
[info] Run completed in 6 seconds, 365 milliseconds.
[info] Total number of tests run: 2
[info] Suites: completed 2, aborted 0
[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 264 s, completed Apr 15, 2019 2:47:10 PM
Ответ №1:
Если вы хотите запустить value of x
тест из Test1Demo
:
testOnly *Test1Demo -- -z value
Эта команда sbt будет запускать только те тесты, имя которых содержит подстроку «значение».
Для точного соответствия, а не подстроки, используйте -t
вместо -z
.
Обратите внимание на --
(два -
, а не один)
Комментарии:
1. Спасибо за ответ, но у меня есть платформа для кросс-компиляции sbt, и я хотел запускать каждый тест платформы отдельно, например. Мне нужен только тест JVM, а не родной или JS, без использования команды testOnly, просто добавьте некоторые настройки в мой файл build.sbt
2. Может быть, я неправильно использую filter, не могли бы вы меня поправить?
3. Я думаю, вам не хватает
config
части. Попробуйте что-то вроде этого:lazy val FunTest = config("fun") extend(Test) ThisBuild / organization := "com.example" ThisBuild / scalaVersion := "2.12.8" ThisBuild / version := "0.1.0-SNAPSHOT" def unitFilter(name: String): Boolean = (name endsWith "Test") lazy val root = (project in file(".")) .configs(FunTest) .settings( libraryDependencies = scalatest % FunTest, testOptions in Test := Seq(Tests.Filter(unitFilter)) )
. из официальной документации scala-sbt.org/1.x/docs/Testing.html4. Где я должен заменить имя теста, который я хотел запустить?
5.
name endsWith "Test1Demo"