`
daoyongyu
  • 浏览: 126103 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JUNIT4 GroboUtils多线程测试

阅读更多
利用JUNIT4,GroboUtils进行多线程测试

多线程编程和测试一直是比较难搞的事情,特别是多线程测试。只用充分的测试,才可以发现多线程编码的潜在BUG。下面就介绍一下我自己在测试多线程并发程序时用的一个比较简单好用的测试工具类库。即JUNIT4和GroboUtils。
废话不多说,把代码贴出来,大家一看就明白了。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner;
import net.sourceforge.groboutils.junit.v1.TestRunnable;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MutiThreadTest {
	//此处可以声明一些公共变量
	static ApplicationContext context = null;
	static String[] path = new String[] { "" };
	static Map<String, String> countMap = new Hashtable<String, String>();
	static Map<String, String> countMap2 = new Hashtable<String, String>();
	static Set<String> countSet = new HashSet<String>();
	static List<String> list = new ArrayList<String>();

	@Before
	public void setUp() throws Exception {
		context = new ClassPathXmlApplicationContext(path);
	}

	@After
	public void tearDown() throws Exception {
		context = null;
	}
         	/**
	 * JUNIT会运行这个方法,是主线程
	 */
	@Test
	public void testThreadJunit() throws Throwable {
		//TestRunnable,实例化自定义的7个线程
		TestRunnable tr1, tr2, tr3, tr4, tr5, tr6, tr7;
		tr1 = new ThreadA();
		tr2 = new ThreadB();
		tr3 = new ThreadC();
		tr4 = new ThreadD();
		tr5 = new ThreadE();
		tr6 = new ThreadF();
		tr7 = new ThreadG();
		//必须声明为一个数组,把该数组当参数传递给 MultiThreadedTestRunner
		TestRunnable[] trs = { tr1, tr2, tr3, tr4, tr5, tr6, tr7 };
        //不需改动
		MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(trs);
		//执行MTTR和7线程
		mttr.runTestRunnables();
	}
	
	/**
	 * 要运行多线程,首先要实现自定义的线程</br>
	 * 如下我定义了A,B,C,D,E,F,G七个线程</br>
	 * 注意:自定义线程必须要继承TestRunnable</br>
	 * 并且覆盖runTest()方法
	 *
	 */
	private class ThreadA extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			//线程要调用的方法或者要执行的操作
			myCommMethod2();
		}
	}

	private class ThreadB extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	private class ThreadC extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	private class ThreadD extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	private class ThreadE extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	private class ThreadF extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	private class ThreadG extends TestRunnable {
		@Override
		public void runTest() throws Throwable {
			myCommMethod2();
		}
	}

	/**
	 * 线程要调用的方法。在此方法中</br>
	 * 实现你的多线程代码测试。
	 * @throws Exception
	 */
	public void myCommMethod2() throws Exception {
		System.out.println("线程===" + Thread.currentThread().getId() + "执行myCommMethod2操作开始");
		for (int i = 0; i <10; i++) {
			 int a  = i*5;
			 System.out.println(a);
		}
		System.out.println("线程===" + Thread.currentThread().getId() + "执行myCommMethod2操作结束");
	}
}

参考文章:
[url]
http://www.ibm.com/developerworks/cn/java/j-lo-test-multithread/index.html?ca=drs-
[/url]
[url]
http://groboutils.sourceforge.net/index.html[/url]
1
1
分享到:
评论
1 楼 cosmo1987 2012-03-28  
感觉这样是不是要把原本写的继承自Thread的类全部改写成继承自TestRunnable,并且其中的run方法改写成runTest。

可能自己不知道如何把执行方法和线程创建分离开来。如果按照目前贴出的代码的话,我测试完线程之后,要把所有类改写回去也是一个麻烦事。如果类一多的话,问题就来了。难免会遗漏。

不知道有没有更加好的方法来实现多线程测试?

相关推荐

    Java多线程Junit测试GroboUtils-5.zip

    Java多线程与JUnit测试是软件开发中两个重要的概念,特别是在大型项目中,它们的结合使用对于提升代码质量、确保程序稳定性和优化性能至关重要。GroboUtils-5.zip这个压缩包很可能包含了一些辅助进行Java多线程测试...

    有关Junit和多线程测试的问题

    GroboUtils是一个专门为了解决JUnit在多线程测试中遇到问题的扩展库。它提供了额外的功能,帮助开发者有效地编写和执行多线程单元测试,以确保在并发环境下代码的正确性和稳定性。 首先,GroboUtils为JUnit提供了一...

    多线程测试组件groboutils

    它能够与JUnit、TestNG等主流的测试框架无缝对接,让多线程测试成为现有测试流程的一部分,而不是孤立的存在。 在实际使用中,groboutils的文档详尽且易懂,提供了丰富的示例代码,帮助开发者快速上手。同时,其...

    GroboUtils-5-core.jar

    《GroboUtils-5-core.jar:提升Junit测试多线程效率的秘密武器》 在软件开发过程中,单元测试是确保代码质量的重要环节,而当涉及到多线程编程时,测试的复杂性会显著增加。GroboUtils-5-core.jar正是为了解决这一...

    groboutils

    总的来说,groboutils是一个专注于多线程和测试的Java工具集,它提供了高级的多线程管理功能,并且集成了JUnit,增强了测试能力。通过这个单一的JAR文件,开发者可以轻松地在其项目中引入这些实用工具,提高代码的...

    GroboUtils-5-core

    GroboUtils-5-core 是一个专门针对Java开发的测试工具包,主要目的是为了简化和加速Junit测试中的多线程并发测试。这个工具包的核心功能是帮助开发者在编写测试用例时,能够轻松地创建和管理多线程环境,从而确保在...

    groboutils-core-5.jar.7z

    这种测试通常会模拟多个用户同时访问系统,以检测潜在的线程安全问题、资源管理问题以及在高压力环境下的性能瓶颈。这一步对于确保软件在生产环境中能够可靠运行至关重要。 “自测jar包没有问题”意味着发布者已经...

    java并发测试

    4. **线程安全**:验证接口和共享数据结构在多线程环境中的安全性。例如,通过使用`synchronized`关键字、`volatile`变量、`Atomic`类或者`ThreadLocal`来确保数据的一致性。 5. **竞态条件**:寻找并修复可能导致...

Global site tag (gtag.js) - Google Analytics