我想测试一些方法在失败时会被召回。调用在单独的线程中执行。所以我写这样的代码
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。除此之外,我真的不明白它在这种特殊情况下是否有帮助。所以,
为什么添加延迟有帮助?
做这些事情的正确方法是什么?