您可以在單一行中要求整個工具組
//> 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
物件,延伸 Tests
和 TestModule.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 包含更多宣告方法,您可以在其 文件 中找到: assertNotEquals
、assertNoDiff
、fail
和 compileErrors
。