CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Scala 语言入门/课时/测试
RawBlame
课时目录12 节

Scala 语言入门

  1. 01Scala 是什么
  2. 02基础语法
  3. 03OOP 与模式匹配
  4. 04集合与高阶函数
  5. 05函数式编程
  6. 06类型系统
  7. 07构建工具
  8. 08后端框架
  9. 09数据与 JSON
  10. 10测试
  11. 11并发与流
  12. 12综合练习

测试

ScalaTest、MUnit、ZIO Test。

30 分钟

测试

Scala 测试主流框架:ScalaTest(BDD/FunSpec 风格)、MUnit(轻量、Scala 3 友好)、ZIO Test(效应测试)。对照 /roadmaps/scala「Testing」节点。

学习目标

  • 用 ScalaTest 编写单元测试与表驱动测试
  • 了解 MUnit 与 sbt 测试集成
  • 知道 ZIO Test 测效应型代码的方式

核心概念

ScalaTest 单元测试

// src/main/scala/calc.scala
def add(a: Int, b: Int): Int = a + b

def parsePositive(s: String): Option[Int] =
  s.toIntOption.filter(_ > 0)

// src/test/scala/calcSuite.scala
import org.scalatest.funsuite.AnyFunSuite

class CalcSuite extends AnyFunSuite:

  test("add") {
    assert(add(2, 3) == 5)
  }

  test("parsePositive rejects zero and invalid") {
    assert(parsePositive("0").isEmpty)
    assert(parsePositive("abc").isEmpty)
    assert(parsePositive("42").contains(42))
  }
sbt test
sbt "testOnly CalcSuite"

测试类放 src/test/scala,sbt 自动发现 *Suite / *Test。

表驱动与 Matchers

import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.matchers.should.Matchers

class AddTableSuite extends AnyFunSuite with Matchers:

  val cases = List(
    (1, 2, 3),
    (0, 0, 0),
    (-1, 1, 0)
  )

  cases.foreach { (a, b, want) =>
    test(s"add($a, $b) == $want") {
      add(a, b) shouldBe want
    }
  }

表驱动与 Go table-driven test 同理;shouldBe 提供更好的失败 diff。

MUnit 与 ZIO Test 概览

// MUnit 示例
class BookmarkSuite extends munit.FunSuite:
  test("title nonEmpty") {
    assertEquals(Bookmark(1, "u", "t").title, "t")
  }

// ZIO Test 概念
import zio.test._
import zio.test.Assertion._

val spec = suite("bookmark")(
  test("valid id") {
    assert(parseId("1"))(isRight(equalTo(1L)))
  }
)

MUnit 启动快、与 Scala 3 集成好;ZIO Test 可测 ZIO 失败分支与 clock 等环境。

与 Java 对照

ScalaJava
ScalaTest / MUnitJUnit 5
sbt testmvn test / Gradle test
ZIO Test无标准效应测试
FunSuite / FlatSpec
@Test 方法

Spring Boot 项目常用 JUnit + MockMvc;Scala HTTP 服务可用 Pekko HTTP TestKit 或 http4s 客户端测试。

练习

  • 为 sc-collections 中的 allTags 逻辑写 3 个测试
  • 用 ScalaTest 测 Circe 编解码 round-trip
  • 对比 spring-boot-essentials 中 MockMvc 测试流程

小结

ScalaTest 功能全,MUnit 轻量,ZIO Test 覆盖效应代码。 下一课并发与流。见 scala-essentials。

加载本节练习…
← 上一课数据与 JSON下一课 →并发与流