为什么可以在 Scala 中通过 Junit 使用 Scalatest

How come Scalatest can be used via Junit in Scala

在Scala课程的Example Assignment的build.sbt中,使用的测试库是junit 4.10。没有提到Scalatest。

libraryDependencies += "junit" % "junit" % "4.10" % Test

然而在测试中 class 可以引用 scalatest 并且可以使用实际的 scalatest 语法编写测试:

import org.scalatest.FunSuite
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner

@RunWith(classOf[JUnitRunner])
class ListsSuite extends FunSuite with Matchers {
  ...etc...
}

问题:我想 Scala 编译器通过 junit 库访问 scalatest。如果是这样,在junit中嵌入scalatest的原因是什么?

我检查了参考课程中的作业项目,它实际上具有相当复杂的结构,使用不推荐的方式在 project/*.scala 文件中定义构建,扩展 Build

您的问题的答案很简单:scalatest 依赖项在 project/CommonBuild.scala 中定义并添加到 project/StudentBuildLike.scala 中的构建中。所以没有魔法,您使用的是普通的 scalatest 和自定义测试运行器(参见 project/ScalaTestRunner.scala)。