mockito verify“times”显示的计数小于实际值

dzhpxtsq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(243)

我正在尝试对包含executor服务的代码运行进行单元测试,根据列表中的设备数量,api被调用两次或两次以上。当我尝试从控制台进行单元测试时,mockitoverify失败,抛出一个错误,即当我传递设备列表时,api只被调用一次。但是,当我在intellij中调试时,它工作正常,并根据列表中的设备数执行和验证。
下面是代码

final ExecutorService executor = new ThreadPoolExecutor(MAX_THREADS,
    TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<Runnable>());

DeviceList.stream().forEach(device -> executor.execute(() ->
    GatewayToTest.deliver(device, id, testObject)));

单元测试代码:

verify(GatewayToTest, times(devices.size()))
    .deliver(any(Device.class), anyString(), any(TestObject.class));

在上面的代码中,当我在控制台中运行单元测试时,gatewaytotest只被调用一次。

8gsdolmq

8gsdolmq1#

执行是异步运行的,因此不能保证 GatewayToTest.deliver 以前发生 verify . 提交要执行的任务后,尝试等待终止:

executor.awaitTermination(10,TimeUnit.SECONDS);

相关问题