多线程junit单元测试
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单元测试相关推荐
- android 单元测试 多线程,多线程之单元测试(Junit)
多线程测试服务 1.新建一个核心数为100 的线程池 ExecutorService service = Executors.newFixedThreadPool(100); 2.执行一个阻塞不大的任 ...
- Junit单元测试不支持多线程测试问题全解析
一.背景 今天@段段提出了一个很好的问题,她发现单元测试时如果开多个线程,主线程运行结束就结束了,并不会等待子线程结束. 如果用main方法就没问题,技术群里展开了激烈的讨论. 本文将"复现 ...
- Junit单元测试多线程
Junit单元测试多线程 Main方法里执行多线程 vs 使用Junit测试多线程 main方法调用结果 Junit测试结果 解决方法 先说结论:Junit不支持多线程,在主线程执行完后,无论是否是守 ...
- 教你快速写出多线程Junit单元测试用例 - GroboUtils
摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...
- 多线程的单元测试工具 - GroboUtils
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- JUnit单元测试、网络编程
JUnit单元测试.网络编程 今日内容 JUnit单元测试 网络编程 第一章 JUnit单元测试 1.简介 Junit是什么 * Junit是Java语言编写的第三方单元测试框架(工具类) * 类库 ...
- JUnit单元测试依赖包构建路径错误解决办法
JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.
- Junit单元测试需要知道的一些知识点
Junit单元测试框架-基于java语言对的主流单元测试框架 @beforeClass-位于数据准备前期或者其他前期准备(测试类调用前) --用于提取代码中的共用部分减少冗余,只能声明注解一次 --必 ...
- java中JUnit单元测试的使用方法
package com.atguigu.java2;import java.sql.Date;import org.junit.Test;/** java中的JUnit单元测试* 步骤:(可以直接写@ ...
最新文章
- python 64位程序 打包用于32位系统_python分别打包出32位和64位应用程序
- element-ui button组件 radio组件源码分析整理笔记(一)
- Java String 到底是引用传递还是值传递?
- GitHub 私有仓库完全免费面向团队提供
- python字符串find函数-python常见字符串处理函数与用法汇总
- datagirdview跟据内容自动适应单元格大小
- oracle 查看监听命令_linux下使用Oracle常用命令
- PFILE和SPFILE
- ajax 防止用户反复提交
- python基础--字符串单引号双引号和三引号
- 数字电子技术基础阎石(第六版)基本公式和若干常用公式的电路证明方法
- 商业数据可视化分析基础知识
- 栅栏密码 - Python脚本
- maya藤蔓插件_Maya特效制作之植物生长动画制作教程(二)之多条藤蔓动画制作...
- python统计套利_基于python的统计套利实战(四)之策略实现
- 亚马逊云科技 Build On -轻松搭建咖啡点单系统
- [周更]5.unity3D 三体运动(简易版)
- 平安科技移动开发二队技术周报(第十期)
- 用python解决数学问题
- vue.js 在微信公众号内实现视频播放