6

失敗したときにいくつかのメソッドがリコールされることをテストしたいと思います。呼び出しは別のスレッドで実行されます。だから私はこのようなコードを書く

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 を追加するのは好きではありません。それに加えて、この特定のケースで役立つ間、私は実際には理解していません。そう、

遅延を追加すると効果があったのはなぜですか?

そのようなことをする正しい方法は何ですか?

4

3 に答える 3

0

マルチスレッド コンテキストで単体テストを実行する簡単な方法はありません。

しかし、別の同様の質問に対するこの回答を読むことをお勧めします。は、より適切なメソッド呼び出しの背後に隠れるためDRTestUtils便利なメソッドをいくつか提供します。Thread.sleepwaitForCondition

于 2013-07-22T19:00:02.700 に答える
-1

あなたはスイングワーカーを使って実装しようとしましたか?

また、待っている場合は、試して使用しnotifyたり、synchronizedクラスを使用したりすることもできます。

于 2013-07-17T14:50:16.923 に答える