Scala 工具組

如何撰寫測試?

語言

您可以在單一行中要求整個工具組

//> using toolkit latest

MUnit 身為一個測試架構,僅在測試檔案中可用:test 目錄中的檔案或具有 .test.scala 副檔名的檔案。請參閱 Scala CLI 文件 以深入了解測試範圍。

或者,你可以只要求 MUnit 的特定版本

//> using dep org.scalameta::munit:1.0.0-M7

在你的 build.sbt 檔案中,你可以新增對 toolkit-test 的依賴關係

lazy val example = project.in(file("example"))
  .settings(
    scalaVersion := "3.2.2",
    libraryDependencies += "org.scala-lang" %% "toolkit-test" % "0.1.7" % Test
  )

這裡的 Test 組態表示此依賴關係僅由 example/src/test 中的原始碼檔案使用。

或者,你可以只要求 MUnit 的特定版本

libraryDependencies += "org.scalameta" %% "munit" % "1.0.0-M7" % Test

在你的 build.sc 檔案中,你可以新增一個 test 物件,延伸 TestsTestModule.Munit

object example extends ScalaModule {
  def scalaVersion = "3.2.2"
  object test extends Tests with TestModule.Munit {
    def ivyDeps =
      Agg(
        ivy"org.scala-lang::toolkit-test:0.1.7"
      )
  }
}

或者,你可以只要求 MUnit 的特定版本

ivy"org.scalameta::munit:1.0.0-M7"

撰寫測試套件

單一類別中的一組測試稱為測試類別或測試套件。

每個測試套件驗證軟體的特定元件或功能。我們通常會為每個我們想要測試的原始碼檔案或類別定義一個測試套件。

在 Scala CLI 中,測試檔案可以與實際程式碼放在同一個資料夾中,但檔案名稱必須以 .test.scala 結尾。在以下範例中,MyTests.test.scala 是測試檔案。

example/
├── MyApp.scala
└── MyTests.test.scala

其他有效的結構和慣例說明在 Scala CLI 文件 中。

在 sbt 中,測試原始碼會放在 src/test/scala 資料夾中。

例如,以下是專案 example 的檔案結構

example
└── src
    ├── main
    │   └── scala
    │       └── MyApp.scala
    └── test
        └── scala
            └── MyTests.scala

在 Mill 中,測試原始碼會放在 test/src 資料夾中。

例如,以下為模組 example 的檔案結構

example
└── src
|   └── MyApp.scala
└── test
    └── src
        └── MyTests.scala

在測試原始檔中,定義包含單一測試的套件

package example

class MyTests extends munit.FunSuite {
  test("sum of two integers") {
    val obtained = 2 + 2
    val expected = 4
    assertEquals(obtained, expected)
  }
}
package example

class MyTests extends munit.FunSuite:
  test("sum of two integers") {
    val obtained = 2 + 2
    val expected = 4
    assertEquals(obtained, expected)
  }

測試套件是延伸 munit.FunSuite 的 Scala 類別。它包含一個或多個測試,每個測試都由呼叫 test 方法來定義。

在先前的範例中,我們有一個單一測試 "整數總和",用來檢查 2 + 2 是否等於 4。我們使用宣告方法 assertEquals 來檢查兩個值是否相等。如果所有宣告都正確,測試就會通過,否則就會失敗。

宣告

在每個測試中使用宣告來描述要檢查的內容非常重要。MUnit 中的主要宣告方法為

  • assertEquals 用來檢查您取得的內容是否等於您預期的內容
  • assert 用來檢查布林條件

以下是一個測試範例,它使用 assert 來檢查清單上的布林條件。

test("all even numbers") {
  val input: List[Int] = List(1, 2, 3, 4)
  val obtainedResults: List[Int] = input.map(_ * 2)
  // check that obtained values are all even numbers
  assert(obtainedResults.forall(x => x % 2 == 0))
}
test("all even numbers") {
  val input: List[Int] = List(1, 2, 3, 4)
  val obtainedResults: List[Int] = input.map(_ * 2)
  // check that obtained values are all even numbers
  assert(obtainedResults.forall(x => x % 2 == 0))
}

MUnit 包含更多宣告方法,您可以在其 文件 中找到: assertNotEqualsassertNoDifffailcompileErrors

此頁面的貢獻者