Mockito 超时如何工作?
How does Mockito timeout work?
我是 Mockito 和 JUnit 的新手,尝试了解这些框架的基本单元测试。 JUnit 和 Mockito 中的大多数概念看起来都很简单易懂。但是,我在 Mockito 中遇到了 timeout
。 timeout
在 Mockito 中的作用和在 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();
}
我是 Mockito 和 JUnit 的新手,尝试了解这些框架的基本单元测试。 JUnit 和 Mockito 中的大多数概念看起来都很简单易懂。但是,我在 Mockito 中遇到了 timeout
。 timeout
在 Mockito 中的作用和在 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();
}