Question

I'm using ScalaTest for testing some Scala code. I currently testing for expected exceptions with code like this

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]
        }
    }
}

But I would like to add additional check on the exception, e.g. I would like to check that the exceptions message contains a certain String.

Is there a 'clean' way to do this? Or do I have to use a try catch block?

Was it helpful?

Solution

I found a solution

val exception = intercept[SomeException]{ ... code that throws SomeException ... }
// you can add more assertions based on exception here

OTHER TIPS

You can do the same sort of thing with the evaluating ... should produce syntax, because like intercept, it returns the caught exception:

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

Then inspect the exception.

If you need to further inspect an expected exception, you can capture it using this syntax:

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

This expression returns the caught exception so that you can inspect it further:

thrown.getMessage should equal ("Some message")

you can also capture and inspect an expected exception in one statement, like this:

the [SomeException] thrownBy {
  // Code that throws SomeException
} should have message "Some message"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top