java - 使用 ExecutorService 运行时,Mockito 验证 "times"显示的计数少于实际计数

标签 java unit-testing mockito executorservice threadpoolexecutor

我正在尝试对包含执行程序服务的代码运行进行单元测试,其中 api 被调用两次或更多次,具体取决于列表中的设备数量。当我尝试从控制台对其进行单元测试时,Mockito verify 失败并抛出错误,表明在我传递设备列表时 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 仅被调用一次。

最佳答案

执行是异步运行的,因此您不能保证对 GatewayToTest.deliver 的所有调用都在 verify 之前发生。 提交执行任务后尝试等待终止:

executor.awaitTermination(10,TimeUnit.SECONDS);

关于java - 使用 ExecutorService 运行时,Mockito 验证 "times"显示的计数少于实际计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042125/

相关文章:

java - 正则表达式替换java中轮询路径中的文件夹名称

python - 如何在 Django 的单元测试期间禁用翻译?

c# - 如何执行WinAppDriverUiRecorder

java - JUnit 测试包含 RestTemplate 交换调用的 void 方法

unit-testing - PowerMock、Mockito 和来自反射 api 的模拟最终类

Java消耗太多内存

java - 网络爬虫是否读取WEB-INF文件夹内的JSP页面

android - 使用 Robolectric 和 Mockito 模拟 findViewById 响应

java - 无纹理四边形未在 OpenGL ES 3.0 中渲染

c# - 在 MSTest (testConfig) 中使用配置文件