假设我有这样的代码:

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/

10-12 02:47