gpt4 book ai didi

java - Mockito 超时如何工作?

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

我是 Mockito 和 JUnit 的新手,尝试了解使用这些框架进行的基本单元测试。 JUnit 和 Mockito 中的大多数概念看起来都很简单易懂。但是,我在 Mockito 中遇到了 timeout 问题。 Mockito 中的 timeout 和 JUnit 中的作用一样吗?贝娄是我的代码。

@Mock Timeoutable timeoutable;

@Test(timeout = 100)
public void testJUnitTimeout() {
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {

}
}

@Test
public void testMockitoTimeout(){
doAnswer(new Answer() {
@Override public Object answer(InvocationOnMock invocation){
try {
Thread.sleep(1000);
} catch (InterruptedException ie){

}
return null;
}
}).when(timeoutable).longOperation();
timeoutable.longOperation();
verify(timeoutable, timeout(100)).longOperation();
}

我预计这两个测试都失败了。但只有 testJUnitTimeout() 失败了。为什么第二次测试通过?

非常感谢。

最佳答案

Verification with timeout旨在用于验证操作是否已在指定超时内并发调用。

它为并发操作提供有限形式的验证。

以下示例演示了该行为:

private final Runnable asyncOperation = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
timeoutable.longOperation();
} catch (InterruptedException e) {
}
}

};

@Test
public void testMockitoConcurrentTimeoutSucceeds(){
new Thread(asyncOperation).start();
verify(timeoutable, timeout(2000)).longOperation();
}

@Test
public void testMockitoConcurrentTimeoutFails(){
new Thread(asyncOperation).start();
verify(timeoutable, timeout(100)).longOperation();
}

关于java - Mockito 超时如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31398021/

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