web-dev-qa-db-ja.com

EasyMockモックオブジェクトに例外をスローさせる

EasyMockを使用して、多数の共同作業クラスの単体テストを作成しています。これらのクラスの1つ(これをFooと呼びます)は、リモートサーバーへのネットワーク接続を開き、そのサーバーのXML応答を解析して、残りのクラスが使用できるものに変換します。

現在、私のテストは、すべてがおかしくなり、リモートサーバーが稼働中であり、期待どおりにXMLを返すシナリオのみを網羅しています。しかし、私はFooをモックしてリモートサーバーがダウンした場合や、他の問題が原因で発生する問題をシミュレートできると、幸せになりますIOExceptionFooによってスローされます。

EasyMock APIを確認しましたが、モックに例外をスローするように要求するメソッドのように見えるものは何もありません。

私がExceptionベースのテストを行うことは絶対に必須ではありませんが、EasyMockでそれが可能であるかどうか知りたいので、Fooのパブリックコントラクトをこの方法でテストすると便利だと思います。

EasyMockでこのようなことをした人はいますか?

参照

21
Jon

ドキュメント から:

スローされる例外(より正確にはThrowables)を指定するために、expectLastCall()およびexpect(T value)によって返されるオブジェクトは、メソッドandThrow(Throwable throwable)を提供します。スローするThrowableを指定するモックオブジェクトを呼び出した後、メソッドをレコード状態で呼び出す必要があります。

未チェックの例外(つまり、RuntimeExceptionErrorおよびそれらのすべてのサブクラス)は、すべてのメソッドからスローできます。チェック例外は、実際に例外をスローするメソッドからのみスローできます。

例えば:

expectLastCall().andThrow(new HibernateException("Something terrible happened"));

expect(query.list()).andThrow(
        new HibernateException("Something terrible happened"));
28
Péter Török

簡単なモックでメソッドandThrow(Throwable throwable)を使用できます。 ドキュメント -見出し例外の処理を確認します。

例えば

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);
4
Augusto