Sbt запустить тесты из src / main / scala вместо src / test / scala? - PullRequest
1 голос
/ 07 февраля 2020

Скажем, у меня самый большой класс в main / scala, например

import org.scalatest.FunSuite

class q3 extends FunSuite {
    test("6 5 4 3 2 1") {
        val digits = Array(6,5,4,3,2,1)
        assert(digits.sorted === Array(1,2,3,4,5,6))
    }
}

Как мне запустить его с sbt?

Я пробовал sbt test, sbt testOnly, sbt "testOnly *q3" и у всех них был вывод, например

[info] Run completed in 44 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 0, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
[info] No tests were executed.
[info] No tests to run for Test / testOnly

Аналогичный вопрос, который был задан несколько лет назад, сказал, что они успешно использовали testOnly, но я не могу заставить его работать.

Расширение металлов в VSCode показывает ссылку «тест», когда файл открыт, который успешно выполняет тест, но не показывает, как он это делает. Я хочу знать, как это сделать через sbt.

1 Ответ

2 голосов
/ 07 февраля 2020

Поместите ScalaTest на Compile classpath в build.sbt примерно так

libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.0"

, а затем явно вызовите org.scalatest.run бегун из App, например,

object MainTests extends App {
  org.scalatest.run(new ExampleSpec)
}

Собираем все вместе У нас есть src/main/scala/example/MainTests.scala

package example

import org.scalatest.matchers.should.Matchers
import org.scalatest.flatspec.AnyFlatSpec
import collection.mutable.Stack
import org.scalatest._

class ExampleSpec extends AnyFlatSpec with Matchers {
  "A Stack" should "pop values in last-in-first-out order" in {
    val stack = new Stack[Int]
    stack.push(1)
    stack.push(2)
    stack.pop() should be (2)
    stack.pop() should be (1)
  }
}

object MainTests extends App {
  org.scalatest.run(new ExampleSpec)
}

и запускаем его с runMain example.MainTests. Кроме того, мы могли бы собирать тесты в Suites и execute все так же

class ExampleASpec extends FlatSpec with Matchers {
  "ExampleA" should "run" in { succeed }
}
class ExampleBSpec extends FlatSpec with Matchers {
  "ExampleB" should "run" in { succeed }
}

class ExampleSuite extends Suites(
  new ExampleASpec,
  new ExampleBSpec,
)

object MainTests extends App {
  (new ExampleSuite).execute()
}
...