22

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

現在、私のテストでは、すべてがうまく機能せず、リモート サーバーが稼働しており、期待どおりに XML を返すシナリオのみが含まれています。ただし、リモート サーバーがダウンした場合や、によって がスローされる原因となるその他の問題が発生した場合に何が起こるかをシミュレートできるように、モックを作成できれば幸いですFooIOExceptionFoo

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

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

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

参考文献

4

2 に答える 2

29

ドキュメントから:

Throwableスローされる例外 (正確には s) を指定するために、 によって返されるオブジェクトと メソッド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"));
于 2011-02-17T10:12:04.497 に答える
5

andThrow(Throwable throwable)簡単なモックでメソッドを使用できます。ドキュメントの見出しWorking with Exceptions を確認してください。

例えば

 expect(mock.voteForRemoval("Document"))
    .andThrow(new RuntimeException(), 4);
于 2011-02-17T10:12:54.513 に答える