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

来源:互联网 发布:鸡兔同笼c语言编程答案 编辑:程序博客网 时间:2024/04/29 05:21

模拟多线程测试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;   }@Overridepublic 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 blocke.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();      }   }}


  


0 0
原创粉丝点击