junit中测试完成后会进行jvm退出,而不是线程退出,所以任一线程退出都会导致测试结束,junit想进行多线程测试需要进行另外包装,网上看到一个投机取巧的例子还不错,贴上我的测试代码(代码中我需要测试socket客户端代码,所以需要模拟服务端才能测试,故而进行两个线程测试):

package com.newland.sri.utap.ats;import com.newland.sri.utap.ats.utils.AnalyPacket;
import com.newland.sri.utap.utils.Constants;
import org.apache.ignite.Ignition;
import org.junit.Before;
import org.junit.Test;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** 测试* Created by garfield on 2016/6/20.*/
public class AtsTest {final static private long THREAD_MAX_RUNTIME = 10000000;final static private long THREAD_WAITTIME = 200;private T1 myThread1 = null;private T2 myThread2 = null;@Beforepublic void setUp() throws Exception {myThread1 = new T1();myThread2 = new T2();}@Test(timeout = THREAD_MAX_RUNTIME)public void testRun() throws Exception {Thread t1 = new Thread(myThread1);Thread t2 = new Thread(myThread2);t1.start();t2.start();Thread tc = Thread.currentThread();synchronized (tc) {while (t1.isAlive() || t2.isAlive()) {tc.wait(THREAD_WAITTIME);}tc.notify();}}class T1 implements Runnable {private ServerSocket server;@Overridepublic void run() {try {server = new ServerSocket(6666);Constants.IGNITE = Ignition.start("utap-ats.xml");while (true) {AgentServer agentServer = new AgentServer();agentServer.start();break;}} catch (Exception e) {e.printStackTrace();}}}class T2 implements Runnable {@Overridepublic void run() {try {Socket socket = new Socket("127.0.0.1", 6666);DataOutputStream out = new DataOutputStream(socket.getOutputStream());out.write();//写入东西,此处代码省略out.flush();while (true) {if (socket.getInputStream() != null) {DataInputStream in = new DataInputStream(socket.getInputStream());byte[] bytes = new byte[200];int start = 0;in.read(bytes);break;}}} catch (Exception e) {e.printStackTrace();}}}
}

可以看到我的线程是启动了ignite了的,并且有服务端和客户端,这些都不重要= =,代码中

 Thread tc = Thread.currentThread();synchronized (tc) {while (t1.isAlive() || t2.isAlive()) {tc.wait(THREAD_WAITTIME);}tc.notify();}

这一段使得线程切换得以进行,通过这个方法,很多多线程的单元测试都可以进行啦.

转载于:https://www.cnblogs.com/garfieldcgf/p/5620221.html

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

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

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

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

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

  3. Junit单元测试多线程

    Junit单元测试多线程 Main方法里执行多线程 vs 使用Junit测试多线程 main方法调用结果 Junit测试结果 解决方法 先说结论:Junit不支持多线程,在主线程执行完后,无论是否是守 ...

  4. 教你快速写出多线程Junit单元测试用例 - GroboUtils

    摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...

  5. 多线程的单元测试工具 - GroboUtils

    写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...

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

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

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

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

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

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

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

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

最新文章

  1. python 64位程序 打包用于32位系统_python分别打包出32位和64位应用程序
  2. element-ui button组件 radio组件源码分析整理笔记(一)
  3. Java String 到底是引用传递还是值传递?
  4. GitHub 私有仓库完全免费面向团队提供
  5. python字符串find函数-python常见字符串处理函数与用法汇总
  6. datagirdview跟据内容自动适应单元格大小
  7. oracle 查看监听命令_linux下使用Oracle常用命令
  8. PFILE和SPFILE
  9. ajax 防止用户反复提交
  10. python基础--字符串单引号双引号和三引号
  11. 数字电子技术基础阎石(第六版)基本公式和若干常用公式的电路证明方法
  12. 商业数据可视化分析基础知识
  13. 栅栏密码 - Python脚本
  14. maya藤蔓插件_Maya特效制作之植物生长动画制作教程(二)之多条藤蔓动画制作...
  15. python统计套利_基于python的统计套利实战(四)之策略实现
  16. 亚马逊云科技 Build On -轻松搭建咖啡点单系统
  17. [周更]5.unity3D 三体运动(简易版)
  18. 平安科技移动开发二队技术周报(第十期)
  19. 用python解决数学问题
  20. vue.js 在微信公众号内实现视频播放

热门文章

  1. 一文读懂Netty的核心构成块
  2. 如何学习Web前端知识转型?
  3. C++基础教程之多态
  4. Java基础:BufferedWriter和PushbackReader
  5. vue cli3--创建通用模版
  6. react+百度地图实现自定义图标
  7. 微服务体系三维可缩放模型
  8. HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
  9. IEC61850的Read请求报文件MMS PDU解码
  10. 线程池(领导者-追随者,生产者-消费者等)小结