Compilation error: error: object scalatest is not a member of package.org, am NOT using sbt

Compilation error: error: object scalatest is not a member of package.org, am NOT using sbt

我已经使用 Scala 编程了大约一个星期,但没有使用 sbt - 我下载了 'scala binaries for windows'(使用 Windows 10)并且刚刚使用文本编辑器编写脚本,并通过命令行编译和执行,例如

  /** Calculate factorial of n
    * Pre: n >= 0
    * Post: returns n! */
  def fact(n: Int) : BigInt = {
    require(n>=0)
    if(n==0) 1 else fact(n-1)*n
  }

  // Main method
  def main(args: Array[String]) : Unit = { 
    print("Please input a number: ")
    val n = scala.io.StdIn.readInt()
    if(n>=0){
      val f = fact(n)
      println("The factorial of "+n+" is "+f)
    }
    else println("Sorry, negative numbers aren't allowed")
  }
}

然后:

到目前为止,还不错。输入:ScalaTest.

import org.scalatest.funsuite.AnyFunSuite

import Factorial.fact

class FactTest extends AnyFunSuite {
   test("0! is 1"){ assert(fact(0) === 1) }
   test("5! is 120") { assert(fact(5) === 120) }
   test("3! is 5") {assert(fact(3) === 5) } //Want to see what happens when the test isn't passed
}

但这不会编译。

我是 运行 scala 2.13.4,所以版本都匹配(我相信?)

我最好的猜测是我不认为 scalac 实际上是 finding/using ScalaTest 文件,但我不知道为什么。

有什么帮助吗?

编辑:已添加 funsuite scalatest jar,但仍然无法正常工作...

主要的 ScalaTest JAR 不包含 AnyFunSuite。您还需要 scalatest-funsuite_2.13-3.2.3.jar。并且主要的 ScalaTest JAR 不仅依赖于 scalactic JAR;它还取决于 scalatest-core_2.13-3.2.3.jar,因此您在类路径中也需要它。

也许您还需要其他一些 JAR——我没看。我回答的重点不是说“这是您在这种特定情况下需要的特定 JAR”。我回答的目的是教育你——说“一般来说,库具有传递依赖性,它们可能深入任意数量的级别”,如果你在组装类路径时没有考虑到这一点,那么失败就是可以预测。

您可以查看这些 JAR 的 POM,以递归方式找出它们的依赖项。构建工具会自动为您完成这些工作,并且 assemble 为您提供合适的类路径,您无需经历这个麻烦。

如果您不愿意使用完整的构建工具,但愿意使用仅处理下载依赖树和为您组装类路径的较小工具,请考虑使用 Coursier.

解决方案原来是我试图使用单独版本的 Scalatic 和 Scalatest,尽管它们最近已集成。

下载并用作类路径 scalatest-app_2.13-3.2.2.jar 修复了所有问题。