我是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()
失败了。为什么第二次测试通过?
非常感谢。
答案 0 :(得分:4)
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();
}