11

我正在使用 ScalaTest 来测试一些 Scala 代码。我目前使用这样的代码测试预期的异常

import org.scalatest._
import org.scalatest.matchers.ShouldMatchers

class ImageComparisonTest extends FeatureSpec with ShouldMatchers{

    feature("A test can throw an exception") {

        scenario("when an exception is throw this is expected"){
            evaluating { throw new Exception("message") } should produce [Exception]
        }
    }
}

但是我想对异常添加额外的检查,例如我想检查异常消息是否包含某个字符串。

有没有“干净”的方法来做到这一点?还是我必须使用 try catch 块?

4

3 回答 3

18

我找到了解决方案

val exception = intercept[SomeException]{ ... code that throws SomeException ... }
// you can add more assertions based on exception here
于 2010-11-21T17:45:14.430 回答
9

你可以用评估做同样的事情......应该产生语法,因为像拦截一样,它返回捕获的异常:

val exception =
  evaluating { throw new Exception("message") } should produce [Exception]

然后检查异常。

于 2011-03-08T06:32:27.620 回答
4

如果您需要进一步检查预期的异常,可以使用以下语法捕获它:

val thrown = the [SomeException] thrownBy { /* Code that throws SomeException */ }

此表达式返回捕获的异常,以便您可以进一步检查它:

thrown.getMessage should equal ("Some message")

您还可以在一个语句中捕获和检查预期的异常,如下所示:

the [SomeException] thrownBy {
  // Code that throws SomeException
} should have message "Some message"
于 2016-02-22T13:05:24.910 回答