我正在尝试模拟一种情况,其中我的代码抛出了致命错误,并且在恢复后它还会执行其他操作。像这样:
Try {
// do something
} recover {
case NonFatal(e) => println("I want to get to this point")
}
我正试图使用模拟像when(mock.doMethodThatCallsTry).thenThrow(non-fatal)
一样,但是我找不到一个非致命的例子,在浏览了scala文档之后,我可以抛出一个非致命例子来模拟这种情况。
答案 0 :(得分:0)
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),而致命的是无。请参阅https://docs.scala-lang.org/tour/extractor-objects.html以供参考。
您可以抛出任何非致命异常。