Как проверить дополнительные свойства ожидаемых исключений с помощью ScalaTest

Я использую 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?

3 ответов


Я нашел решение

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

вы можете сделать то же самое с оценки ... должен создавать синтаксис, потому что, как и intercept, он возвращает пойманное исключение:

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

затем проверьте исключение.


Если нужно дополнительно проверить ожидаемое исключение, вы можете захватить его, используя следующий синтаксис:

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"