Jens Schauder
Jens Schauder

Reputation: 81998

How to test for additional properties of expected Exceptions using ScalaTest

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?

Upvotes: 11

Views: 4184

Answers (3)

Ali Dehghani
Ali Dehghani

Reputation: 48213

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"

Upvotes: 4

Bill Venners
Bill Venners

Reputation: 3881

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.

Upvotes: 9

Jens Schauder
Jens Schauder

Reputation: 81998

I found a solution

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

Upvotes: 18

Related Questions