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。