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 修复了所有问题。
我已经使用 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 修复了所有问题。