我是 Scala / ZIO 2 世界的初学者,我正在尝试为一个简单的服务编写一些测试。
所以我有这个方法:
def validate(id: String): ZIO[Any, Throwable, Unit] = {
if (id == "invalid-id") {
ZIO.fail("Invalid id")
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事,但主要是尝试使用isFailure或fails断言:
suite("My suite")(
test("When id is valid") { // This passes
for {
result <- validate("valid-id")
} yield assertTrue(result == ())
},
test("when id is not valid") {
for {
result <- validate("invalid-id")
} yield assertTrue(isFailure(result)) // This doesn't even compile
}
)
Run Code Online (Sandbox Code Playgroud)
如何测试效果失败的情况?
我在用:
Scala: "3.2.1"
zio: "2.0.4"
zio-test: "2.0.5"
Run Code Online (Sandbox Code Playgroud)
有多种方法可以断言效果失败。ZIO#exit下面的示例演示了和的用法ZIO#flip。
import zio._
import zio.test._
object MySpec extends ZIOSpecDefault {
def validate(id: String): ZIO[Any, String, Unit] =
ZIO.cond(id != "invalid-id", (), "Invalid id")
def spec =
suite("My suite")(
test("when id is not valid 1") {
for {
result <- validate("invalid-id").exit
} yield assertTrue(
result == Exit.fail("Invalid id")
)
},
test("when id is not valid 2") {
for {
result <- validate("invalid-id").flip
} yield assertTrue(
result == "Invalid id"
)
}
)
}
Run Code Online (Sandbox Code Playgroud)