Scala 抛出异常后,如何在Try构造中测试正确的返回字符串?
我想测试是否抛出了Scala 抛出异常后,如何在Try构造中测试正确的返回字符串?,scala,tdd,scalatest,Scala,Tdd,Scalatest,我想测试是否抛出了IOException,以及是否返回了正确的String值“[]”。我只能检查异常消息和其他内容,但不能断言“[]” 我检查了assertThrows[IOException]和intercept[IOException],但它们只允许我检查常见的异常内容,而不允许我在引发此类异常时检查返回值。我是不是忽略了什么 最简单的方法是什么?这里的问题是IOException被抛出Try之外。如果您在中读取文件,请尝试,它可能会满足您的期望: def readJsonFile(myJs
IOException
,以及是否返回了正确的String
值“[]”。我只能检查异常消息和其他内容,但不能断言“[]”
我检查了assertThrows[IOException]
和intercept[IOException]
,但它们只允许我检查常见的异常内容,而不允许我在引发此类异常时检查返回值。我是不是忽略了什么
最简单的方法是什么?这里的问题是
IOException
被抛出Try
之外。如果您在中读取文件,请尝试,它可能会满足您的期望:
def readJsonFile(myJson: String): String =
Try {
Files.readAllBytes(FileSystems.getDefault().getPath(myJson))
} match {
case Success(bytes) => new String(bytes)
case Failure(ioe: IOException) => "[]"
case Failure(e) => sys.error(s"There was a problem with: $e")
}
这里的问题是IOException
被抛出Try
之外。如果您在中读取文件,请尝试,它可能会满足您的期望:
def readJsonFile(myJson: String): String =
Try {
Files.readAllBytes(FileSystems.getDefault().getPath(myJson))
} match {
case Success(bytes) => new String(bytes)
case Failure(ioe: IOException) => "[]"
case Failure(e) => sys.error(s"There was a problem with: $e")
}
是的,这正是问题所在。非常感谢。顺便说一句,你知道如何测试最后一个案例失败(e)=>sys.error(s“有一个问题:$e”)
?我认为你无法测试意外的异常。如果您有一个场景,您可以使用scalatest拦截功能。它适用于您期望出现异常的情况。若并没有抛出异常,那个么测试将失败。这篇博文解释得非常清楚:(可能还会引发异常(未指定可能发生的情况)。最好使用已知的Charset
并处理故障。)是的,这正是问题所在。非常感谢。顺便说一句,你知道如何测试最后一个案例失败(e)=>sys.error(s“有一个问题:$e”)
?我认为你无法测试意外的异常。如果您有一个场景,您可以使用scalatest拦截功能。它适用于您期望出现异常的情况。若并没有抛出异常,那个么测试将失败。这篇博文解释得非常清楚:(可能还会引发异常(未指定可能发生的情况)。最好使用已知的Charset
并处理故障。)