Почему sbt говорит «плохая символическая ссылка …» для теста со ScalaTest?

#scala #sbt #scalatest

#scala #sbt #scalatest

Вопрос:

Я начал использовать ScalaTest с sbt. Build.sbt выглядит следующим образом:

 name := "MySpecSample"

version := "1.0"

libraryDependencies   = "org.scalatest" % "scalatest_2.11" % "2.2.0" % "test"

scalaVersion := "2.10.3" 
 

Начальный тестовый код здесь. Этот тестовый код выполняется один, без кода основного компонента.

 import collection.mutable.Stack
import org.scalatest._

class ExampleSpec extends FlatSpec 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)
  }

  it should "throw NoSuchElementException if an empty stack is popped" in {
    val emptyStack = new Stack[Int]
    a [NoSuchElementException] should be thrownBy {
      emptyStack.pop()
    } 
  }
}
 

Я написал это в соответствии с официальным quick start.
Но он не работает должным образом. Сообщение об ошибке выглядит следующим образом:

 > test
[info] Compiling 1 Scala source to /Users/kaisasak/untitled/target/scala-2.10/test-classes...
[error] bad symbolic reference. A signature in package.class refers to type compileTimeOnly
[error] in package scala.annotation which is not available.
[error] It may be completely missing from the current classpath, or the version on
[error] the classpath might be incompatible with the version used when compiling package.class.
[error] /Users/kaisasak/untitled/src/test/scala/ExampleSpec.scala:6: Reference to class FlatSpec in package scalatest should not have survived past type checking,
[error] it should have been processed and eliminated during expansion of an enclosing macro.
[error] class ExampleSpec extends FlatSpec with Matchers {
[error]                         ^
[error] two errors found
[error] (test:compile) Compilation failed
[error] Total time: 3 s, completed Jun 29, 2014 11:20:41 AM
 

Я могу найти те же проблемы в Google, но хорошего ответа не было.
Моя среда здесь.

  • MacOSX 10.9.3
  • Scala 2.10.3
  • sbt 0.13.2

Я попробовал использовать sbt 0.13.1 после понижения рейтинга, но результат такой же, как и у 0.13.2. Что я должен сделать, чтобы использовать ScalaTest с sbt?

Ответ №1:

В вашем build.sbt вы устанавливаете версию Scala на 2.10.3 со следующим:

 scalaVersion := "2.10.3" 
 

Однако зависимость ScalaTest явно использует Scala 2.11 (обратите внимание на _2.11 часть):

 "org.scalatest" % "scalatest_2.11" % "2.2.0" % "test"
 

Вы должны использовать одну и ту же основную версию scala для обоих.

С sbt вы можете просто обеспечить это, используя %% вместо % следующего:

 "org.scalatest" %% "scalatest" % "2.2.0" % "test"