11

Specs BDD ライブラリを使用して Scala 単体テスト ( http://code.google.com/p/specs ) を記述します。私のコードでは、タイプ ClassNotFoundException の例外がスローされることをアサートしたい場合、次のように記述できます。コード:

a must throwA[ClassNotFoundException]

ただし、逆のケースをテストしたい、つまり ClassNotFoundException 型の例外を「スローしない」ことをアサートしたい。

次のように、not negation matcher を使用してみました。

 a must throwA[ClassNotFoundException].not

しかし、それはうまくいきませんでした。コンパイルエラーが発生します。それで、たとえば ClassNotFoundException 型の例外がスローされないと断言できる方法はありますか?

助けてください ありがとう

4

4 に答える 4

17

はい、コンパイル時に解析の問題があります:

 a must throwA[ClassNotFoundException].not

代わりに次のように書く必要があります:

 a must not(throwA[ClassNotFoundException])
于 2011-03-17T00:34:40.577 に答える
2

以下のテストは、式が次のもの以外をスローする場合に合格しますClassNotFoundException

 must throwA[Exception].like {
    case m:  ClassNotFoundException => false
    case _ => true}

式が ClassNotFoundException をスローしないことを確認したいだけの場合は、try-catch ブロックを使用してみませんか。

try{
         ...
    }catch{
        case m:  ClassNotFoundException => fail("ClassNotFoundException")
        case e => e.printStackTrace
}
于 2011-02-08T12:46:58.837 に答える
2

問題が解決しない場合でも、例外がスローされないかどうかをテストする必要はありません。この場合、意図した結果が正しいかどうかを確認した方がよいでしょう... テストが実行されるとすぐに、例外がスローされないことを意味します。

于 2011-02-08T12:25:51.113 に答える
2

このようなものはどうですか:

"An isSpaceNode function" should {
    "not fail with a Group" in {
       Group(<a/><b/>).isSpaceNode must not throwA(new UnsupportedOperationException)
    }
}
于 2011-02-08T12:31:51.800 に答える