我正在尝试学习Scala,scalatest和sbt的基础知识,并且我正在学习教程。这是我的built.sbt
文件:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
我有一个看起来像这样的测试(显示这可能是不必要的:
package demo
import org.scalatest.FunSuite
class HelloTest extends FunSuite {
test("say hello method works correctly") {
val hello = new Hello
assert(hello.sayHello("Scala") == "Hello, Scala!")
}
}
我该怎么办?我正在尝试运行测试,但是我收到了这个错误:
Error:(8, 36) can't expand macros compiled by previous versions of Scala
assert(hello.sayHello("Scala") == "Hello, Scala!")
我不熟悉%
符号btw。
FIX
我将build.sbt
更改为:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.10"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
剩下的问题:
scalatest
显然是一件神器?答案 0 :(得分:1)
稍微无序地回答您的问题:
2 - "神器"是由maven,sbt或其他构建系统构建的东西。对于Scala或Java,这几乎总是一个jar文件。 libraryDependencies
中的每个项目都指定maven存储库(工件数据库)中的文件。
1 - Scala类文件在Scala的次要版本之间不兼容。从maven存储库下载Scala jar时,Scala版本被指定为工件名称的一部分。您的依赖项中的_2.10
声明您希望使用为Scala 2.10编译的scalatest
版本 - 这就是您在Scala 2.12应用程序中使用它时出错的原因。< / p>
在sbt中声明对Scala工件的依赖时,应始终使用%%
运算符,该运算符会自动将相应的后缀附加到工件中,如下所示:
// This works for any scalaVersion setting.
libraryDependencies += "org.scalatest" %% "scalatest" % "2.1.0" % "test"
3 - sbt
自动处理为声明的Scala版本下载相应的运行时文件。