Пример Scala NonFatal - PullRequest
       3

Пример Scala NonFatal

0 голосов
/ 20 февраля 2019

Я пытаюсь смоделировать ситуацию, когда мой код генерирует нефатальный код, и после восстановления он делает что-то ещеЧто-то вроде:

Try {
// do something
} recover {
  case NonFatal(e) => println("I want to get to this point")
}

И я пытаюсь использовать mocks, чтобы быть похожим на when(mock.doMethodThatCallsTry).thenThrow(non-fatal), но я не могу найти пример нефатального, который я могу бросить, чтобы подражать этой ситуации после осмотра на scalaDocs.

1 Ответ

0 голосов
/ 21 февраля 2019

NonFatal - это объект scala, который определяет нефатальные ошибки.Вот определение

object NonFatal {
/**
* Returns true if the provided `Throwable` is to be considered non-fatal, or false if it is to be considered fatal
*/
    def apply(t: Throwable): Boolean = t match {
    // VirtualMachineError includes OutOfMemoryError and other fatal errors
    case _: VirtualMachineError | _: ThreadDeath | _: InterruptedException | _: LinkageError | _: ControlThrowable => false
             case _ => true
     }
     /**
     * Returns Some(t) if NonFatal(t) == true, otherwise None
     */
     def unapply(t: Throwable): Option[Throwable] = if (apply(t)) Some(t) else None
}

Значение каждого сгенерированного исключения (кроме фатальных) будет поймано в случае

case NonFatal(e) => println("I want to get to this point")

Потому что в неприменимых нефатальных исключениях есть Some (t), в то время как Fatalодин из нихСм. https://docs.scala -lang.org / tour / extractor-objects.html для справки.

Вы можете просто выбросить любое нефатальное исключение.

...