【发布时间】:2015-10-02 13:58:35
【问题描述】:
我是 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() 失败了。为什么第二次测试通过了?
非常感谢。
【问题讨论】:
-
第二种方法中
timeoutable的值是多少?您确定正在执行Thread.sleep(1000)调用吗? -
@TimBiegeleisen:
timeoutable只是我为测试而写的 Timeoutable 接口的一个模拟对象。不多不少。 -
你能在调试模式下运行你的单元测试吗?我怀疑
Thread.sleep()调用在第二次测试中永远不会被执行。 -
我尝试在调试模式下运行。
Thread.sleep()实际上是按预期调用的。我怀疑doAnswer和其他类似存根方法的执行时间没有计入超时计数。 -
如果您有解释,请随时回答您自己的问题。
标签: java junit timeout mockito