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
并处理故障。)