我只是在同时调用模拟对象上的方法时编写了一个Mockito代码来测试verify(mock, timeout())
功能。
@RunWith(Parameterized.class)
public class MockitoTest {
@Parameters
public static Collection<Object[]> data() {
return Stream.generate(() -> new Object[]{}).limit(100).collect(Collectors.toList());
}
@Test
public void testVerifyTimeout() throws Exception {
List listMock = mock(List.class);
ExecutorService executorService = Executors.newFixedThreadPool(2);
Stream.iterate(0, i -> i + 1).limit(10).map(i -> new AddToListTask(listMock, i)).forEach(executorService::submit);
verify(listMock, timeout(1000)).add(2);
executorService.shutdown();
}
private static class AddToListTask implements Callable<Void> {
private final List<Integer> list;
private final int value;
public AddToListTask(List<Integer> list, int value) {
this.list = list;
this.value = value;
}
@Override
public Void call() throws Exception {
list.add(value);
return null;
}
}
}
此测试在100次运行中随机失败10-20次。这是一个非常基本的情况,我们同时运行模拟方法,并且结果并不总是正确验证。 每次测试运行大约25ms-50ms,但即使失败,也不会等待1秒。 有什么想法吗?
答案 0 :(得分:1)
在mockito 1.9.0中,这是一个错误,但已经修复,因此从版本1.9.5开始(包括1.10.x,2.x)运行良好。