gpt4 book ai didi

java - 在多线程中使用 easymock

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:05 24 4
gpt4 key购买 nike

我想测试一些方法是否会在失败时被召回。调用在单独的线程中执行。所以我这样写代码

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。除此之外,我实际上并不了解它在这种特殊情况下是否有帮助。所以,

为什么增加延迟有帮助?

做这些事情的正确方法是什么?

最佳答案

我的方法是使用锁。您的帖子中没有足够的信息来显示确定的内容,但它可能看起来像这样:

final Lock lock = new Lock();
lock.lock();
expectLastCall().andAnswer(new IAnswer<Void>() {
@Override public Void answer() throws Throwable {
lock.unlock();
throw new RuntimeException("TEST EXCEPTION");
}
});
doStuff();
lock.lock();
verify(mock);

这里的要点是第二次 lock() 调用被阻塞,直到你的 mock 中的 unlock 释放了锁。

关于java - 在多线程中使用 easymock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com