Я следую документам here, и это, похоже, не работает; но я даже не уверен, что я делаю неправильно здесь.Изменения в build.sbt для включения тестов ScalaTest для запуска Scala Play
Для начала просто добавление данного фрагмента в файл project/Build.scala
вызывает ошибку компиляции; так что это не начало. Обтекание внутри объекта, которое продолжается Build
(как в примере SBT), не вызывает ошибки компиляции, но тесты не выполняются.
В конце концов, я добавил следующее к моему build.sbt
libraryDependencies ++= Seq(
"org.scalatestplus" %% "play" % "1.0.0" % "test",
...
это немного лучше, но в IntelliJ, мой ApplicationSpec
имеет все виды ошибок компиляции:
import org.scalatestplus.play._
import scala.collection.mutable.Stack
class ApplicationSpec extends PlaySpec {
"A Stack" must {
"pop values in last-in-first-out order" in {
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
stack.pop() mustBe 2
stack.pop() mustBe 1
}
"throw NoSuchElementException if an empty stack is popped" in {
val emptyStack = new Stack[Int]
a [NoSuchElementException] must be thrownBy {
emptyStack.pop()
}
}
}
}
must
, mustBe
и a
не распознаются. Наконец, если я пытаюсь запустить activator test
я получаю:
sentinel/test:definedTests
java.lang.NoSuchMethodError: org.specs2.runner.Fingerprints$.fp1()Lorg/specs2/runner/SpecificationFingerprint;
at org.specs2.runner.Specs2Framework.fingerprints(SbtRunner.scala:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sbt.TestFramework$.getFingerprints(TestFramework.scala:113)
at sbt.Tests$$anonfun$discover$1.apply(Tests.scala:242)
at sbt.Tests$$anonfun$discover$1.apply(Tests.scala:242)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
at sbt.Tests$.discover(Tests.scala:242)
at sbt.Defaults$$anonfun$detectTests$1.apply(Defaults.scala:556)
...
[error] (sentinel/test:definedTests) java.lang.reflect.InvocationTargetException
По существу, эпическая неудачу - это было бы здорово, если бы документы были немного более конкретными в том, что требуется и то, что, как ожидается, для всех машин в работа: как бы то ни было, трудно распутать беспорядок.
Я искал поисковые запросы и смотрел здесь на переполнение стека в течение нескольких часов сегодня, посмотрел документы ScalaTestPlus (ну, все два абзаца) ... и попробовал много вариантов, все безрезультатно.
full project's code is on github.
Стоит отметить, что если я уступлю «сильной плохой документации», и я использую Specs2, тогда тесты будут работать правильно (по крайней мере изнутри Intellij и, насколько это касается примера «hello world») ,
Я бы по-прежнему предпочитал использовать ScalaTest (не могу понять, почему мне нужно изучить TWO-рамки тестирования, действительно) - поэтому любая помощь будет оценена.
Может ли ваша IntelliJ IDEA быть не в синхронизации с файлом build.sbt? Если вы не выбрали флажок «автоматический импорт» при импорте проекта в IntelliJ, вам необходимо вручную импортировать его. Первый эксперимент, который я попросил бы попытаться выяснить, - просто попробовать и запустить тесты вручную вне IntelliJ. Если они там отлично работают, я бы повторно импортировал проект в IntelliJ. –
@BillVenners, что определенно не так, изменения в build.sbt отражаются сразу же в запуске. В любом случае даже запуск от активатора приводит к сбою тестов с последним исключением. – Marco
OK. Мы попробуем это из вашего проекта. Трассировка стека, которую вы получаете, не исходит от ScalaTest, поэтому что-то еще не так. –