logo-cover-spring boot 2.0入门之spring boot 2.0 Junit单元测试多线程问题解决

问题描述

测试的业务将部分数据添加入一个公开队列中,有另外一个业务类进行多线程轮训等待处理。业务场景中涉及到了多线程异步任务。当使用spring boot 2.0自带的Junit整合测试业务时候,端点等待子线程无效。子线程会随主线程断点而断点执行。简单的说就是你在测试的业务中添加断点来等待子线程(异步多线程业务处理)时候,你会发现主线断点走一步,子线程也就动一下。从而子线程的异步任务无法得到正确的测试结果。主线程结束子线程就算任务没完成也会被强制结束。
 

问题解决

由于Junit的运行机制,目前临时的解决方式是在写的单元测试方法中调用测试的业务方法后面添加线程睡眠,也就是Thread.sleep(time);睡眠的时间根据子线程处理业务的速度估计个2倍。