多线程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;
@Before
public 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;
@Override
public 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 {
@Override
public 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();
}
这一段使得线程切换得以进行,通过这个方法,很多多线程的单元测试都可以进行啦.
多线程junit单元测试的更多相关文章
- Junit单元测试多线程的问题
今天下午很快完成了一个接口的监控功能,然后屁颠屁颠地用Junit开始单元测试.然后我就开始陷入崩溃的边缘... 监控结束后需要将监控结果以邮件的形式发送给运营的小伙伴维护,前面测试还是很顺利,到了开多 ...
- 教你快速写出多线程Junit单元测试用例 - GroboUtils
摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...
- 多线程的单元测试工具 - GroboUtils
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- junit单元测试(keeps the bar green to keeps the code clean)
error是程序错误,failure是测试错误. junit概要: JUnit是由 Erich Gamma (设计模式的创始人)和 Kent Beck (敏捷开发的创始人之一)编写的一个回归测试框架( ...
- spring && Cobertura && maven &&junit 单元测试以及测试覆盖率
1. 目的: junit 单元测试,Cobertura 测试覆盖率报告 项目目录结构 2. maven 配置 <project xmlns= ...
- 解决Junit单元测试 找不到类 ----指定Java Build Path
做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default ou ...
- JUnit单元测试框架的使用
http://blog.csdn.net/mao520741111/article/details/51462215 原文地址 http://www.open-open.com/lib/view/op ...
- Java 工具 JUnit单元测试
Java 工具 JUnit单元测试 @author ixenos 1.1. JUnit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个 ...
- Spring框架中整合JUnit单元测试的方法
一. 步骤: 1. 拷贝jar包: 1. JUnit-4.9.jar和spring-test-4.2.4.RELEASE.jar ; 2. 替换原来的main函数: 1. 在测试类上使用注解方式替换: ...
随机推荐
- Eclipse Kepler maven工程配置JDK1.8
首先需要下载插件:"Help" --> "Market Place" --> Search for java 8 kepler. install J ...
- hdu 2425 Hiking Trip (bfs+优先队列)
Problem Description Hiking in the mountains is seldom an easy task for most people, as it is extreme ...
- urllib2 之info 学习
之前介绍了根据old_url获取真实url的geturl的方法,而根据urlopen返回的应答对象的info方法可以获取服务器发送头部headers的内容,并且通过字典形式反馈出来,同样测试代码如下: ...
- onmousedown活用之鼠标拖动
这个布局蛮简单的就是一个div块,通过定位,固定位置 <html> <head> <meta charset="UTF-8"> <titl ...
- android 录制视频方式
http://www.cnblogs.com/skyseraph/archive/2012/03/31/2427593.html http://bbs.csdn.net/topics/39088448 ...
- Centos6.6安装Nginx
1.在安装nginx之前,需要先安装该模块需要依赖包 yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel 2.安 ...
- jQuery.on() 函数详解[http://www.365mini.com/page/jquery-on.htm]
中文手册 2014年09月01日 暂无评论 on()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 从jQuery 1.7开始,on()函数 ...
- log4net 日志文件占用,不能及时释放
在appender 下面加 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
- JQuery中常用方法备忘
本文转载自博客园,原文地址 http://www.cnblogs.com/xzf158/archive/2008/10/14/logan.html 1.Window.onload 的JQuery方法 ...
- Android软件盘InputMethodManager
调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSys ...