JUnit 单元测试多线程测试解决方法

这篇具有很好参考价值的文章主要介绍了JUnit 单元测试多线程测试解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

在使用 JUnit 单元测试对多线程测试时子线程没有执行,测试非多线程问题则可以正常执行。

原因

JUnit 运行时会在主线程直接完成后调用 System.exit 退出,不会等待各个线程运行结束。文章来源地址https://www.toymoban.com/news/detail-574237.html

解决方案

死循环

@Test
public void demo() {
    int threadNum = 10;
    // 初始化线程池
    ExecutorService executorService = new ThreadPoolExecutor(threadNum,// 核心线程池大小
            100,// 最大线程池大小
            60L,// 线程最大空闲时间;线程空闲60s后自动结束
            TimeUnit.MILLISECONDS,// 时间单位
            new LinkedBlockingQueue<Runnable>()// 线程等待队列
    );

    for (int i = 1; i <= threadNum; i++) {
        executorService.execute(() -> {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        });


    }

    while (true) {

    }

}

计数器(CountDownLatch)

@Test
public void demo() {
    int threadNum = 10;
    // 初始化线程池
    ExecutorService executorService = new ThreadPoolExecutor(threadNum,// 核心线程池大小
            100,// 最大线程池大小
            60L,// 线程最大空闲时间;线程空闲60s后自动结束
            TimeUnit.MILLISECONDS,// 时间单位
            new LinkedBlockingQueue<Runnable>()// 线程等待队列
    );
    CountDownLatch countDownlatch = new CountDownLatch(threadNum);//使用计数器

    for (int i = 1; i <= threadNum; i++) {
        executorService.execute(() -> {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());

            // 每次计数减一,很关键, 否则await无法释放
            countDownlatch.countDown();
        });

    }

    try {
        // 当计数为0时结束阻塞,所有线程countDown()都执行之后才会释放当前线程,程序才能继续往后执行
        countDownlatch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    //关闭线程池
    executorService.shutdown();

}

到了这里,关于JUnit 单元测试多线程测试解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单元测试junit(原始版本、Spring Boot各版本、junit5)使用介绍

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 单元测试 junit各版本 使用介绍 官

    2023年04月16日
    浏览(44)
  • java 单元测试Junit

    所谓 单元测试 ,就是针对最小的功能单元,编写测试代码对其进行正确性测试。为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,给开发者使用。这里介绍一种Junit测试框架。Junit是第三方公司开源出来的,用于对代码进行单元测试的工具(IDEA已经

    2024年02月07日
    浏览(65)
  • Java中的JUnit是什么?如何使用JUnit进行单元测试

    JUnit是Java中最流行的单元测试框架之一。它可以帮助开发人员在代码编写过程中检测出错误和异常,从而提高代码的质量和可靠性。 JUnit是一个由Kent Beck和Erich Gamma创建的开源Java单元测试框架,它已经成为Java开发中最常用的测试框架之一。这个框架的主要目的是为了简化单元

    2024年02月12日
    浏览(71)
  • 【Junit】单元测试Mock静态方法

    开发依赖 版本 Spring Boot 3.0.6 JDK 20 如果没有引入 mockito-inline 这个依赖,使用mock静态方法,则会抛这个异常

    2024年02月04日
    浏览(38)
  • 【单元测试】Junit 4教程(一)--白盒测试方法

    目录 1.0 流程图标识 1.1 语句覆盖法(C0标准) 1.2 判定/分支覆盖法(C1标准) 1.3 条件覆盖法(C2标准) 1.4 判定条件覆盖法(C1+C2标准) 1.5 条件组合覆盖法(C3标准) 1.6 路径覆盖 1.7 基本路径覆盖法  结语 ① 目标 ​ 程序中的每个可执行语句 至少被执行一次 后面如未说明那

    2024年02月10日
    浏览(74)
  • Java IDEA JUnit 单元测试

    JUnit是一个开源的 Java 单元测试框架,它使得组织和运行测试代码变得非常简单,利用JUnit可以轻松地编写和执行单元测试,并且可以清楚地看到哪些测试成功,哪些失败 JUnit 还提供了生成测试报告的功能,报告不仅包含测试的成功率,还能统计被测试代码的覆盖率。通过进

    2024年02月03日
    浏览(43)
  • Spring Cloud中Controller单元测试 Junit5 & MockMvc

    在Spring Cloud中进行Controller的单元测试,使用Junit5和Mock。 Controller: 方式一:使用@SpringBootTest + @AutoConfigureMockMvc 方式二:使用@WebMvcTest + @ImportAutoConfiguration(RefreshAutoConfiguration.class) 解决 No Scope registered for scope name \\\'refresh\\\' 异常 注入Mockmvc方式有两种 方式一:(@AutoConfigureMockMvc / @

    2024年02月16日
    浏览(38)
  • Java单元测试浅析(JUnit+Mockito)

    Java测试我们应该都遇到过,一般我们会被要求做单元测试,来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单

    2024年02月06日
    浏览(62)
  • Java学习笔记——单元测试(JUnit框架)

    public class mathDemo { int area = 0; public int getArea(int a,int b){ area = a*b; return area; } } mathDemoTest类的代码 package UnitDemo; import UnitDemo.mathDemo; import org.junit.*; import static org.junit.Assert.*; public class mathDemoTest { mathDemo m = new mathDemo(); @BeforeClass public static void setUpClass(){ System.out.println(“在当前类的

    2024年04月26日
    浏览(42)
  • Java单元测试 JUnit 5 快速上手

    一、背景 什么是 JUnit 5?首先就得聊下 Java 单元测试框架 JUnit,它与另一个框架 TestNG 占据了 Java领域里单元测试框架的主要市场,其中 JUnit 有着较长的发展历史和不断演进的丰富功能,备受大多数 Java 开发者的青睐。 而说到 JUnit 的历史,JUnit 起源于 1997年,最初版本是由两

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包