Junit单元测试多线程

  • Main方法里执行多线程 vs 使用Junit测试多线程
    • main方法调用结果
    • Junit测试结果
  • 解决方法

先说结论:Junit不支持多线程,在主线程执行完后,无论是否是守护线程,都会直接退出。导致子线程可能未执行结束。

Main方法里执行多线程 vs 使用Junit测试多线程

用于测试的多线程类:

public class MultiThreadCls {public void func() {System.out.println("func start");ExecutorService threadPool = Executors.newFixedThreadPool(); // 默认为非守护for (int i = 0; i < 5; i++) {int finalI = i;threadPool.execute(() -> {System.out.println("in tread:" + finalI);});}threadPool.shutdown();System.out.println("func end");}
}

main方法调用结果

执行完主线程后,等待子线程也执行完成后才退出

Junit测试结果

有几个子线程未执行就退出

解决方法

为了不修改被测试类,可以在单元测试最后等待,不退出主线程。如:
Thread.sleep(5000); 若能估计子线程什么时候结束,可以单位测试最后sleep
System.in.read(); 若估计不了结束时间,等待键盘输入结束,手动结束测试

如果方便修改被测试类,可以选择CountDownLatch工具类,或jion住子线程的方法。

Junit单元测试多线程相关推荐

  1. android 单元测试 多线程,多线程之单元测试(Junit)

    多线程测试服务 1.新建一个核心数为100 的线程池 ExecutorService service = Executors.newFixedThreadPool(100); 2.执行一个阻塞不大的任 ...

  2. Junit单元测试不支持多线程测试问题全解析

    一.背景 今天@段段提出了一个很好的问题,她发现单元测试时如果开多个线程,主线程运行结束就结束了,并不会等待子线程结束. 如果用main方法就没问题,技术群里展开了激烈的讨论. 本文将"复现 ...

  3. JUnit单元测试、网络编程

    JUnit单元测试.网络编程 今日内容 JUnit单元测试 网络编程 第一章 JUnit单元测试 1.简介 Junit是什么 * Junit是Java语言编写的第三方单元测试框架(工具类) * 类库 ...

  4. JUnit单元测试依赖包构建路径错误解决办法

    JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.

  5. Junit单元测试需要知道的一些知识点

    Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...

  6. java中JUnit单元测试的使用方法

    package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...

  7. JUnit单元测试中的setUpBeforeClass()、tearDownAfterClass()、setUp()、tearDown()方法小结

    编写JUnit单元测试的时候,会用到 setUpBeforeClass().tearDownAfterClass().setUp().tearDown()这四个方法,例如用 eclipse新建一个ju ...

  8. SSM中进行Junit单元测试时无法注入service

    场景 在SSM项目中进行Junit单元测试时调用外部的service时,在使用时打断点发现为空. 代码如下: public class AlipayTester {private PassOrderS ...

  9. surefire 拉起 junit 单元测试类 源码阅读(一)

    根据surefire 拉起Junit单元测试类 输出的报错日志 跟踪执行过程: 日志1: java.lang.reflect.InvocationTargetExceptionat sun.refle ...

最新文章

  1. SAP RETAIL 为物料组指派Merchandise Hierarchy Level Code
  2. 《高可用MySQL》2 – 单机版MySQL主从配置
  3. 设计模式(2): 观察者模式-1
  4. Linux2.6内核驱动与2.4的区别 .
  5. TML5 App 开发框架收集
  6. Atitit 保证产品易用性的方法总结 目录 1. 什么是易用性 易学 易见 三角关系 1 2. 易用性原理 三原则 易见 映射 反馈 2 2.1. 易见 Visibility 可读性 2 2.2.
  7. 【板栗糖GIS】kmz数据是什么,如何打开,普通数据如何转换成kmz格式
  8. 完全卸载vs2008
  9. 《缠论》的精髓是什么?
  10. html照片360度旋转展示,纯js实现360度旋转预览图片特效
  11. 对偶的应用及拓展(Duality Uses and Correspondences)
  12. 《Linux内核 学习笔记》--- 第二章 内存管理 2.9 mmap
  13. splits——安卓gradle
  14. 【Android Studio】ImageView / ImageButton 图片太大或者太小解决方法
  15. iOS-通俗易懂的微信支付接入和爬坑指南,十分钟轻松搞完
  16. Markdown语法文档,Markdown教程,Markdown语法大全,
  17. 为梦想加油:7个值得深思的名人财富故事
  18. true在php中代表,true是什么意思
  19. 关于springmvc静态资源常被忽视,有可能致命的点
  20. 光纤激光器仿真:(5)类噪声脉冲

热门文章

  1. Mat转HBITMAP CBitmap
  2. 图像处理、计算机视觉、算法相关资源
  3. 计算机硕士生招聘,国泰君安招聘计算机硕士实习生
  4. 【计算机组成原理】第三章 存储系统
  5. 【真人手势动画制作软件】万彩手影大师教程 | 水平、垂直翻转元素对象
  6. 下载B站视频的一次经验
  7. rust怎么传送坐标_迷你世界地心世界怎么去 地心传送门制作方法
  8. 实现两个一元多项式加法
  9. window.print() 前端页面打印与预览PDF
  10. ThinkPHP5.0利用路由规则隐藏后台admin登录地址