在新应用程序中运行测试时出现Scala错误。无法扩展宏?

时间:2018-04-27 18:51:03

标签: scala scalatest

我正在尝试学习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"

剩下的问题:

  1. 所以它似乎降级为scalaVersion" 2.10"工作。为什么?
  2. 什么是神器? scalatest显然是一件神器?
  3. scalaversion 2.10在哪里保存在我的机器上?看来我只有scala 2.12。我的项目文件夹中的版本是2.10版本吗?

1 个答案:

答案 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版本下载相应的运行时文件。