单元测试@Test并不支持多线程测试;多次运行,其结果要么没有任何输出结果,要么输出不全。
在最后加个Thread.sleep()只是为了让主线程等待子线程执行完后在结束,你也可以给你的子线程加线程状态,等待你子线程执行完毕后结束主线程。
或者加个超时设置,允许子线程执行完:
@Test(timeout = 100) // in case we never get a notification
public void testGivenNewFooWhenIncrThenGetOne() throws Exception {
...
2)单元测试调不通@Async注解:
所以在单元测试中,调用加了@Async注解的方法是调不通的。
因为使用@Async注解会导致Spring容器为包含@Async注解的类重新生成一个代理子类,然后用子线程去异步的执行完加@Async注解的方法任务。所以在单元测试中,主线程早都结束了,子线程还在执行,故而得不到结果。
如果使用postman或者页面的请求,因为这种情况中,主线程一直是开启着的状态,所以@Async注解可以生效。