scala - 如何断言错误类型中的单个字段?

标签 scala zio zio-test

假设我有这样的代码:

final case class CustomException(errorCode: Int, id: UUID) extends Throwable

val logic: ZIO[Any, Throwable, Unit] = ???

我想使用 ZIO 测试来检查特定的错误情况

val checkForTimeout = testM("Logic should time out") {
  for {
    result <- logic.flip
  } yield assert(result, isSubtype[CustomException](???))
}

我想做的是检查 errorCode 字段的特定值。但似乎 ZIO Test 中现有的组合器只允许我检查完整的对象。 我只想检查 _.errorCode 而忽略 _.id,这意味着 equalTo 对于这个用例来说不是一个足够好的组合器.

我将如何解决这个问题?

最佳答案

您可以使用 Assertion.hasField,它可以让您“放大”更大结构的一部分来执行此操作。

val checkForTimeout = testM("Logic should time out") {
  for {
    result <- logic.flip
  } yield assert(
      result,
      isSubtype[CustomException](hasField("errorCode", _.errorCode, equalTo(1)))
    )
}

关于scala - 如何断言错误类型中的单个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535069/

相关文章:

json - Map[Locale, String] 的 Scala Play Json 格式

scala - 使用代数验证和捕获错误

Scala,ZIO - 如何将 ZIO 转换为 Task 并获得结果?

scala - 如何强制按顺序运行 ZIO 测试

scala - 我如何断言一个选项包含 zio-test 中的内容?

json - 使用 circe 递归地将 JSON 树转换为其他格式(XML、CSV 等)

scala - 如何在java中使用数据流文本io动态目标

scala - CoGroupedRDD 是做什么的?