2010-11-21 5 views
7

私はScalaTestを使っていくつかの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] 
     } 
    } 
} 

のようなコードで期待の例外をテストしかし、私は、例えば、例外に追加のチェックを追加したいと思います例外メッセージに特定のStringが含まれていることを確認したいと思います。

これを行うには「きれいな」方法がありますか?または、try catchブロックを使用する必要がありますか?

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

答えて

16

は、私のような傍受ので、それがキャッチされた例外を返し、あなたが評価するとの事と同じ種類の操作を行うことができ

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

ソリューション...構文を生成する必要がありますを発見しました次に、例外を検査します。

+0

彼の構文:それは機能結果のために "べきである"のすべてと一致する。 –

+0

''評価中 'は2.xで廃止され、3.xでは削除されました。非推奨のドキュメントは '代わりに[例外]をスローする必要があります'を使って助言します。しかし、3.0.0-M14は 'Assertion'を返します:' val ex:Assertion = an [例外]は投げられるべきです{throw new Exception( "boom")} '。 'Exception'をスローする方法はありますか? – kostja

2

あなたがさらに期待される例外を検査する必要がある場合は、この構文を使用して、それをキャプチャすることができます:あなたはそれをさらに調べることができるように

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" 
関連する問題