(ssh) junit 模拟多线程测试servcie 方法

模拟多线程测试service方法一般情况是为了验证如下情况:生成的编码(序列号),或资源是否是唯一的,有没有重复。

测试前提:

  1.dao层,service层接口已经编写完毕

  2.spring 配置文件编写完毕

  3.hibernate配置文件编写完毕

  4.jdbc配置文件编写完毕

  5.log4j配置文件编写完毕

这几个文件均放在service层java project的src目录下。

环境完毕,接下来,进入正题:

 1.编写一个BasicTest类,继承org.springframework.test.AbstractTransactionalDataSourceSpringContextTests,这个类是在spring-test-2.5.6.jar中

如:

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

import com.test.service.OpService;


public class BasicTest extends AbstractTransactionalDataSourceSpringContextTests{
   @Resource
   protected OpService opService;//利用spring配置的注解注入要测试的service层接口
   protected Logger logger = Logger.getLogger("/log4j.properties");//生成一个log4j对象
   //加载spring配置文件,声明采用类型匹配注入接口
   protected String[] getConfigLocations(){
      setAutowireMode(AUTOWIRE_BY_TYPE);
      return new String[]{"classpath:applicationContext.xml"};
   }
}

2.建立一个抽象类,里面有需要测试的service 接口属性

如:

import com.test.service.OpService;


public abstract class SuperThread {
   protected OpService op;

}
3.建立多个线程类,继承抽象类:

   3.1建立线程A

import org.apache.log4j.Logger;

import com.test.service.OpService;
import com.test.pojo.CreatedMac;

public class ThreadA extends SuperThread implements Runnable {
   private Logger loggesr;
   public ThreadA(OpService op,Logger logger){
      this.op = op;
      this.loggesr = logger;
   }
	@Override
	public void run() {
		while(true){
			try {
			   CreatedMac mac =  op.createMac(99L, 1L);//线程中使用service接口op执行方法
			   System.out.println("================ThreadA===============mac:"+mac.getMac()+":");
			   loggesr.error("================ThreadA===============mac:"+mac.getMac()+":");
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch(Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
		}
		

	}

}
   3.2建立线程B

import org.apache.log4j.Logger;

import com.test.service.OpService;
import com.test.pojo.CreatedMac;

public class ThreadB extends SuperThread implements Runnable {
   private Logger loggesr;
   public ThreadB(OpService op,Logger loggesr){
      this.op = op;
      this.loggesr = loggesr;
   }
   @Override
   public void run() {
      while(true){
         try {
            CreatedMac mac =  op.createMac(99L, 1L);//线程中使用service接口op执行方法
            System.out.println("+++++ThreadB+++++++++mac:"+mac.getMac()+":");
            loggesr.error("+++++ThreadB+++++++++mac:"+mac.getMac()+":");
            Thread.sleep(200);
         } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         } catch(Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }
      }
      

   }

}
同样还可以复制copy建立线程c,d,e等等

4.建立junit test方法

import org.junit.Test;

import com.test.BasicTest;
import com.test.ThreadA;
import com.test.ThreadB;
import com.test.ThreadC;

public class OpServiceImplTest  extends BasicTest  {
   @Test
   public void testCreateMac(){
      try {
         ThreadA threada = new ThreadA(opService,logger);
         ThreadB threadb = new ThreadB(opService,logger);
         ThreadC threadc = new ThreadC(opService,logger);
         Thread t = new Thread(threada);
         Thread t1 = new Thread(threadb);
         Thread t2 = new Thread(threadc);
        t.start();
        t1.start();
        t2.start();
        Thread.sleep(50000);//这里是重点,一定要让本线程睡一会,否则上面的线程还没跑就结束了
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}


  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值