您可以在單一列中需要整個工具組
//> 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 中,非同步方法傳回 Future
是很常見的。MUnit 提供了對 Future
的特殊支援。
例如,考慮 square
方法的非同步變體
import scala.concurrent.{ExecutionContext, Future}
object AsyncMathLib {
def square(x: Int)(implicit ec: ExecutionContext): Future[Int] =
Future(x * x)
}
import scala.concurrent.{ExecutionContext, Future}
object AsyncMathLib:
def square(x: Int)(using ExecutionContext): Future[Int] =
Future(x * x)
測試本身可以傳回 Future[Unit]
。MUnit 會在幕後等待結果 Future
完成,如果任何斷言失敗,則測試失敗。
因此,您可以撰寫以下測試
// Import the global execution context, required to call async methods
import scala.concurrent.ExecutionContext.Implicits.global
class AsyncMathLibTests extends munit.FunSuite {
test("square") {
for {
squareOf3 <- AsyncMathLib.square(3)
squareOfMinus4 <- AsyncMathLib.square(-4)
} yield {
assertEquals(squareOf3, 9)
assertEquals(squareOfMinus4, 16)
}
}
}
// Import the global execution context, required to call async methods
import scala.concurrent.ExecutionContext.Implicits.global
class AsyncMathLibTests extends munit.FunSuite:
test("square") {
for
squareOf3 <- AsyncMathLib.square(3)
squareOfMinus4 <- AsyncMathLib.square(-4)
yield
assertEquals(squareOf3, 9)
assertEquals(squareOfMinus4, 16)
}
測試首先非同步計算 square(3)
和 square(-4)
。一旦兩個運算都完成,並且如果它們都成功,它將繼續呼叫 assertEquals
。如果任何斷言失敗,結果 Future[Unit]
失敗,MUnit 將導致測試失敗。
您可以在 MUnit 文件 中閱讀更多關於非同步測試的資訊。它展示了如何使用除了 Future
之外的其他非同步類型。