在对异步函数进行单元测试的时候,若函数依赖注入的对象,需要在调用函数的地方的后面加断点或者加等待函数执行完毕的逻辑。不然,单元测试函数结束了,但异步任务还没执行完毕,单元测试函数结束的时候会销毁bean,但异步任务没执行完依然依赖这些bean,但这些bean已经销毁了,就会报错。
简短的例子
//单元测试类
public class Test{
@Autowired
Service service;
@Test
public void testFunc(){
service.test();
这里可以加个断点
}
}
//待测试的类
public class Service{
@Autowired
Helper helper;
@Async
public void test(){
helper.func(); //调试的时候这里加断点,断点类型设置为thread
}
}
Service 依赖Hepler 对象,若不加等待的逻辑,在service.test()后就会销毁helper,但因为test是异步,他可能没执行完,helper被销毁后再调用就会报错。
还可以用CountDownLatch 让主线程等待异步线程结束任务后再退出。



