Я думаю, вы определенно поняли. Единственное, что я хотел бы добавить для других с похожими вопросами, это то, что в вашем примере также используется тип среды, который является отличной темой для обсуждения, но в какой-то степени независим от того, как проверить, что эффект дает сбой, как и ожидалось, с помощью теста 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")))
}
)
)