失敗したときにいくつかのメソッドがリコールされることをテストしたいと思います。呼び出しは別のスレッドで実行されます。だから私はこのようなコードを書く
final Foo mock = createStrictMock(Foo.class);
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
mock.bar();
replay(mock);
doStuff();
sleepSomeTime(); //Pretty dirty. But I need to test it in multithreading.
verify(mock);
そして、テストはパスしました。しかし、私はまだリコールを実装していません。
テストを失敗させるために、交換しました
mock.bar();
expectLastCall().andThrow(new RuntimeException("TEST EXCEPTION"));
と
mock.bar();
expectLastCall().andAnswer(new IAnswer<Void>() {
@Override
public Void answer() throws Throwable {
sleepSomeTime();
throw new RuntimeException("TEST EXCEPTION");
}
});
しかし、テスト全体に sleepSomeTime を追加するのは好きではありません。それに加えて、この特定のケースで役立つ間、私は実際には理解していません。そう、
遅延を追加すると効果があったのはなぜですか?
そのようなことをする正しい方法は何ですか?