gpt4 book ai didi

scala - 如何使用 zio-test 测试异常情况

转载 作者:行者123 更新时间:2023-12-02 06:46:50 29 4
gpt4 key购买 nike

我有以下功能,我想测试:

def people(id: Int): RIO[R, People]

如果有一个人,此函数将返回 id , 分别如果没有,则失败,例如:
IO.fail(ServiceException(s"No People with id $id"))

快乐的案例有效,例如:
suite("Get a Person for an ID") (
testM("get Luke Skywalker") {
for {
peopleRef <- Ref.make(Vector(People()))
luke <- Swapi.>.people(1).provide(Test(peopleRef))
} yield assert(luke, equalTo(People()))
},

但是我怎样才能测试失败案例呢?我尝试了不同的东西,主要是类型不匹配。这是一个尝试:
    testM("get not existing People") {
(for {
peopleRef <- Ref.make(Vector(People()))
failure = Swapi.>.people(2).provide(Test(peopleRef))
} yield assertM(failure, fail(Cause.die(ServiceException(s"No People with id 2")))
}
)

最佳答案

我想你肯定明白了。我要为其他有类似问题的人添加的唯一内容是您的示例还涉及环境类型,这是一个很好的讨论主题,但在某种程度上独立于如何使用 ZIO 测试测试效果是否按预期失败。

我在下面提供了一个最小示例,说明如何测试效果是否按预期失败。如上所述,您可以调用 run在效果上得到一个退出值然后使用 Assertion.fails断言效果因检查异常而失败,Assertion.dies断言效果因未经检查的异常而失败,或 Assertion.interrupted测试效果是否被中断。

另请注意,您不必使用 include equalTo("fail") .如果您只关心效果失败,您可以使用 fails(anything) .如果您正在测试效果是否因指定的异常而死亡,您可以执行类似 dies(isSubtype[IllegalArgumentException]) 的操作。 .

希望这可以帮助!

import zio.test._
import zio.test.Assertion._
import zio.ZIO

object ExampleSpec
extends DefaultRunnableSpec(
suite("ExampleSpec")(
testM("Example of testing for expected failure") {
for {
result <- ZIO.fail("fail")
} yield assert(result, fails(equalTo("fail")))
}
)
)

关于scala - 如何使用 zio-test 测试异常情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58662285/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com