Scala 有多个库和测试方法,但在本教程中,我们将演示 ScalaTest 框架中一个流行选项,称为 AnyFunSuite。我们假设你知道 如何在命令行上使用 sbt 创建 Scala 项目。
设置
- 在命令行上,在某个地方创建一个新目录。
cd
进入该目录并运行sbt new scala/scalatest-example.g8
- 将项目命名为
ScalaTestTutorial
。 - 该项目在
build.sbt
文件中将 ScalaTest 作为依赖项。 cd
进入目录并运行sbt test
。这将运行测试套件CubeCalculatorTest
,其中包含一个名为CubeCalculator.cube
的测试。
sbt test
[info] Loading global plugins from /Users/username/.sbt/0.13/plugins
[info] Loading project definition from /Users/username/workspace/sandbox/my-something-project/project
[info] Set current project to scalatest-example (in build file:/Users/username/workspace/sandbox/my-something-project/)
[info] CubeCalculatorTest:
[info] - CubeCalculator.cube
[info] Run completed in 267 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 1 s, completed Feb 2, 2017 7:37:31 PM
了解测试
- 在文本编辑器中打开两个文件
src/main/scala/CubeCalculator.scala
src/test/scala/CubeCalculatorTest.scala
- 在文件
CubeCalculator.scala
中,您将看到我们如何定义函数cube
。 - 在文件
CubeCalculatorTest.scala
中,您将看到我们有一个以我们正在测试的对象命名的类。
import org.scalatest.funsuite.AnyFunSuite
class CubeCalculatorTest extends AnyFunSuite {
test("CubeCalculator.cube") {
assert(CubeCalculator.cube(3) === 27)
}
}
让我们逐行了解一下。
class CubeCalculatorTest
表示我们正在测试对象CubeCalculator
extends AnyFunSuite
让我们可以使用 ScalaTest 的 AnyFunSuite 类的功能,例如test
函数test
是 AnyFunSuite 中的一个函数,它收集函数体中断言的结果。"CubeCalculator.cube"
是测试的名称。您可以将其称为任何名称,但一种约定是“ClassName.methodName”。assert
采用一个布尔条件并确定测试是通过还是失败。CubeCalculator.cube(3) === 27
检查cube
函数的输出是否确实为 27。===
是 ScalaTest 的一部分,它提供清晰的错误消息。
添加另一个测试用例
-
添加另一个测试块,其中包含自己的
assert
语句,用于检查0
的立方。import org.scalatest.funsuite.AnyFunSuite class CubeCalculatorTest extends AnyFunSuite { test("CubeCalculator.cube 3 should be 27") { assert(CubeCalculator.cube(3) === 27) } test("CubeCalculator.cube 0 should be 0") { assert(CubeCalculator.cube(0) === 0) } }
-
再次执行
sbt test
以查看结果。sbt test [info] Loading project definition from C:\projects\scalaPlayground\scalatestpractice\project [info] Loading settings for project root from build.sbt ... [info] Set current project to scalatest-example (in build file:/C:/projects/scalaPlayground/scalatestpractice/) [info] Compiling 1 Scala source to C:\projects\scalaPlayground\scalatestpractice\target\scala-2.13\test-classes ... [info] CubeCalculatorTest: [info] - CubeCalculator.cube 3 should be 27 [info] - CubeCalculator.cube 0 should be 0 [info] Run completed in 257 milliseconds. [info] Total number of tests run: 2 [info] Suites: completed 1, aborted 0 [info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0 [info] All tests passed. [success] Total time: 3 s, completed Dec 4, 2019 10:34:04 PM
结论
您已经看到了一种测试 Scala 代码的方法。您可以在 官方网站 上了解有关 ScalaTest 的 FunSuite 的更多信息。您还可以查看其他测试框架,例如 ScalaCheck 和 Specs2。