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. 关于R语言的一些编程经验

    一个晚上写出一个能用的程序…… 来说说遇见的问题吧 zqw<-read.table(file = "c:/data/zqw.txt") zqw<-data.frame( ...

  2. 1.Hibernate框架核心组件 (转自冯岩)

    Hibernate框架核心组件 在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件.首先最关键一 ...

  3. 单尺度二维离散小波重构(逆变换)idwt2

    clc,clear all,close all; load woman; %单尺度二维离散小波分解.分解小波函数haar [cA,cH,cV,cD]=dwt2(X,'haar'); %单尺度二维离散小 ...

  4. 测试word 2013发布blog

    测试图片和各种格式   使用Windows Live Writer 2012和Office Word 2013 发布文章到博客园全面总结 (亲测可用)   我的一些感受: 缺点 (1) Word201 ...

  5. Zeppelin使用spark解释器

    Zeppelin为0.5.6 Zeppelin默认自带本地spark,可以不依赖任何集群,下载bin包,解压安装就可以使用. 使用其他的spark集群在yarn模式下. 配置: vi zeppelin ...

  6. 站在Java的角度看LinkedList

    站在Java的角度看,玩队列不就是玩对象引用对象嘛! public class LinkedList<E> implements List<E>, Deque<E> ...

  7. C# 验证码生成(MVC和非MVC两种方式)

    /// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长度 ...

  8. 36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有

    //接口:CentralPartyCommittee package jieKou; public interface CentralPartyCommittee { void partyLeader ...

  9. 引用WCF地址报下载“https://xxx:8004/TerminalHandler.svc?disco”时出错问题

    服务发布了wcf服务后,在客户端引用发现出现以下错误 - 来自“DISCO 文档”的报告是“下载“https://servername:8004/TerminalHandler.svc?disco”时 ...

  10. 12c 补丁架构 以及opatch 功能

    cd $ORACLE_HOME/ccr/bin ./emocmrsp oracle@qc550705:/oracle/app/oracle/product/12.1.0.2/db_1/ccr/bin& ...