Scala 如何检查故障[T]中包含的异常?

Scala 如何检查故障[T]中包含的异常?,scala,scalatest,Scala,Scalatest,我想知道使用ScalaTest检查失败的文件内容的最佳方法。我现在正在做的事情是这样的: "Subject" should "throw proper exceptions.." in { a[IllegalArgumentException] should be thrownBy { val tryValue = // some method call.. if (tryValue.isFailure) throw tryValue.failed.get } } 如您

我想知道使用ScalaTest检查失败的
文件内容的最佳方法。我现在正在做的事情是这样的:

"Subject" should "throw proper exceptions.." in {
  a[IllegalArgumentException] should be thrownBy {
    val tryValue = // some method call..
    if (tryValue.isFailure) throw tryValue.failed.get
  }
}
如您所见,我只是打开异常并手动抛出它。有没有更惯用的方法来实现同样的目标?

希望这会有所帮助

   Try(1 / 0) match {
          case Success(success) =>
          case Failure(error)   => println(error.getClass.getName)

        }

结果:
java.lang.arithmetricException

如果
失败
结果只是另一个可以匹配的结果,我会选择不会引发异常的结果:

"Subject" should "throw proper exceptions.." in {
  val tryValue = // some method call...
  tryValue shouldBe a[Failure[_]]
  tryValue.failed.get shouldBe an[IllegalArgumentException]
}

以上将断言分开:对于未发生故障的情况和发生错误故障的情况,您将看到不同的测试失败。

首先,在进入更高级的内容之前,您可以替换
if(tryValue.isFailure)抛出tryValue.failed.get
tryValue.get
@TzachZohar我认为这在语义上是不同的。如果
tryValue
不是
Failure
而是
Success
,则会引发另一个异常(由于
get
调用),这使得潜在的测试结果更加复杂(是的,测试无论如何都会失败,但仍然会失败)。或者我错了吗?如果tryValue不是失败而是成功-将不会抛出异常,测试将优雅地失败,并说
java.lang.IllegalArgumentException将被抛出,但没有抛出异常
,这与您的代码完全相同。您是对的。出于某种原因,我阅读了
失败。get
而不仅仅是
get
。这也是我的想法,但我不确定绕过测试框架的异常机制(这里:
thrownBy
)是否被视为良好实践。不过,我觉得它看起来不错,所以谢谢。