【发布时间】:2013-05-20 14:19:13
【问题描述】:
我想测试一些方法是否会在失败时被调用。调用在单独的线程中执行。所以我写这样的代码
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。除此之外,我真的不明白它在这种特殊情况下是否有帮助。 所以,
为什么添加延迟会有所帮助?
做这些事情的正确方法是什么?
【问题讨论】:
标签: java multithreading testing easymock