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单元测试的更多相关文章

  1. Junit单元测试多线程的问题

    今天下午很快完成了一个接口的监控功能,然后屁颠屁颠地用Junit开始单元测试.然后我就开始陷入崩溃的边缘... 监控结束后需要将监控结果以邮件的形式发送给运营的小伙伴维护,前面测试还是很顺利,到了开多 ...

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

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

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

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

  4. junit单元测试(keeps the bar green to keeps the code clean)

    error是程序错误,failure是测试错误. junit概要: JUnit是由 Erich Gamma (设计模式的创始人)和 Kent Beck (敏捷开发的创始人之一)编写的一个回归测试框架( ...

  5. spring && Cobertura && maven &&junit 单元测试以及测试覆盖率

    1. 目的:       junit 单元测试,Cobertura   测试覆盖率报告       项目目录结构          2. maven 配置     <project xmlns= ...

  6. 解决Junit单元测试 找不到类 ----指定Java Build Path

    做junit 单元测试时,发现怎么执行都是以前编译过得代码. 最后找到原因了, src/test/java 编译完的.class路径是 Default output folder Default ou ...

  7. JUnit单元测试框架的使用

    http://blog.csdn.net/mao520741111/article/details/51462215 原文地址 http://www.open-open.com/lib/view/op ...

  8. Java 工具 JUnit单元测试

    Java 工具 JUnit单元测试 @author ixenos 1.1.   JUnit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个 ...

  9. Spring框架中整合JUnit单元测试的方法

    一. 步骤: 1. 拷贝jar包: 1. JUnit-4.9.jar和spring-test-4.2.4.RELEASE.jar ; 2. 替换原来的main函数: 1. 在测试类上使用注解方式替换: ...

随机推荐

  1. hdu_5900_QSC and Master(区间DP)

    题目链接:hdu_5900_QSC and Master 题意: 有n个数,每个数有个key值,有个val,如果相邻的两个数的key的gcd大于1那么就可以得到这两个数的val的和,现在问怎么取使得到 ...

  2. Codeforces Round #366 (Div. 2)_B. Spider Man

    B. Spider Man time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. 千万PV级别WEB站点架构设计

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1369762 高性能与多 ...

  4. 丢掉鼠标-Mac神软Alfred使用手册

    上篇: http://wellsnake.com/jekyll/update/2014/06/15/001/?utm_source=tuicool 下篇: http://wellsnake.com/j ...

  5. digitalocean网站打不开,大陆无法正常访问怎么办?

    在中国大陆,由于某些恶心的原因,digitalocean官方网站经常出现无法打开,或者打开后网页异常的情况,如果你是一个新注册用户,你甚至会被吓到,一个全球知名的vps主机商网站可能是这样的: 我的天 ...

  6. python 信用卡系统+购物商城见解

    通过完成信用卡系统+购物商城 使自己在利用 字典和列表方面有了较大的提升,感悟很深, 下面将我对此次作业所展示的重点列表如下: #!/usr/bin/env python3.5 # -*-coding ...

  7. Python安装coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  8. 关于css的hack问题

    <!--[if <keywords>? IE <version>?]> HTML代码块 <![endif]--> 取值: <keywords> ...

  9. drupal7 安装百度编辑器Ueditor及后续使用

    参考文章:drupal7安装百度编辑器ueditor 一.下载 1.需要下载安装的模块: 1.1.wysiwyg 1.2.ueditor 1.3Libraries 下载后安装在\sites\all\m ...

  10. mongoDB7--游标

    之前我们学习了"增删改查"四中语法和查询表达式的深入学习,我们已经掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作的效率问题了.(1)游标介绍如果我们查询 ...