11

ScalaコードをテストするためにScalaTestを使用しています。私は現在、このようなコードで予想される例外をテストしています

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")

次のように、1 つのステートメントで予期される例外をキャプチャして検査することもできます。

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