EasyMockを使用して、多数の共同作業クラスの単体テストを作成しています。これらのクラスの1つ(これをFoo
と呼びます)は、リモートサーバーへのネットワーク接続を開き、そのサーバーのXML応答を解析して、残りのクラスが使用できるものに変換します。
現在、私のテストは、すべてがおかしくなり、リモートサーバーが稼働中であり、期待どおりにXMLを返すシナリオのみを網羅しています。しかし、私はFoo
をモックしてリモートサーバーがダウンした場合や、他の問題が原因で発生する問題をシミュレートできると、幸せになりますIOException
はFoo
によってスローされます。
EasyMock APIを確認しましたが、モックに例外をスローするように要求するメソッドのように見えるものは何もありません。
私がException
ベースのテストを行うことは絶対に必須ではありませんが、EasyMockでそれが可能であるかどうか知りたいので、Foo
のパブリックコントラクトをこの方法でテストすると便利だと思います。
EasyMockでこのようなことをした人はいますか?
参照
ドキュメント から:
スローされる例外(より正確には
Throwable
s)を指定するために、expectLastCall()
およびexpect(T value)
によって返されるオブジェクトは、メソッドandThrow(Throwable throwable)
を提供します。スローするThrowable
を指定するモックオブジェクトを呼び出した後、メソッドをレコード状態で呼び出す必要があります。未チェックの例外(つまり、
RuntimeException
、Error
およびそれらのすべてのサブクラス)は、すべてのメソッドからスローできます。チェック例外は、実際に例外をスローするメソッドからのみスローできます。
例えば:
expectLastCall().andThrow(new HibernateException("Something terrible happened"));
expect(query.list()).andThrow(
new HibernateException("Something terrible happened"));
簡単なモックでメソッドandThrow(Throwable throwable)
を使用できます。 ドキュメント -見出し例外の処理を確認します。
例えば
expect(mock.voteForRemoval("Document"))
.andThrow(new RuntimeException(), 4);