spring test + junit 测试中使用 线程 , 代码未执行完就结束了 ,可能是junit 强制主线程结束,导致子线程也被强制结束了。
可以使用CountDownLatch 等 方法 使主线程等待 。
测试用例如下:
@Test public void getUpmerchantTest() throws InterruptedException { //MerchantInfo merchantInfo, ShowRequestTransaction reqBody,TransLogInfo transLogInfo,ShowResponseTransaction //showResponse; int count = 100 ; CyclicBarrier barrier = new CyclicBarrier(count); //线程栅栏,等待所有线程都准备好,同时执行 CountDownLatch latch = new CountDownLatch(1); for (int i=0;i<count;i++){ Thread t = new Thread(() -> { try { barrier.await(); ShowRequestTransaction reqBody = new ShowRequestTransaction(); reqBody.setIsFirst("0"); reqBody.setPickMerId("872290045110204"); reqBody.setPickTrmNo("08000181"); TransLogInfo transLogInfo = new TransLogInfo(); transLogInfo.setTransAmount(new BigDecimal("0.01")); UpMerchantInfo info = payHandler.getUpMerchantInfo(new MerchantInfo(),reqBody,transLogInfo,new ShowResponseTransaction()); System.out.println("新的流水号: " +(info==null?null:info.getTransNo())); } catch (Exception e) { e.printStackTrace(); } }); t.start(); } latch.await(); }