Scala 如何检查故障[T]中包含的异常?
我想知道使用ScalaTest检查失败的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 } } 如您
文件内容的最佳方法。我现在正在做的事情是这样的:
"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
)是否被视为良好实践。不过,我觉得它看起来不错,所以谢谢。