`
daoyongyu
  • 浏览: 125531 次
  • 性别: 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提供了一种名为`ThreadControl`的接口,它允许开发者暂停、恢复或终止测试线程。这样,我们可以在特定时刻检查测试对象的状态,确保它们在预期的时间点完成了预期的操作,避免了由于线程间的...

    JUNIT多线程测试

    JUnit 4引入了`@Rule`注解和`TestRule`接口,允许我们创建自定义的测试规则,其中包括对多线程的支持。例如,我们可以使用`ExternalResource`规则来管理线程的生命周期。创建一个`ExternalResource`的子类,可以在...

    多线程测试组件groboutils

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

    spring4+junit4.8 +多线程TheadTool

    6. **测试多线程应用**:在Junit4.8中,我们可以使用`@Rule`注解配合`org.junit.rules.ExternalResource`或`org.junit.rules.TestWatcher`来监控线程行为。此外,`org.junit.concurrent`包中的`Timeout`规则可以在...

    junit4测试jar包

    JUnit4测试框架是Java开发中广泛使用的单元测试工具,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个“junit4测试jar包”包含了一切你需要在项目中集成JUnit4进行测试的库文件。只需将其复制到你的...

    在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...

    GroboUtils-5-core.jar

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

    JUnit3.8.1 以及使用JUnit测试的代码demo

    这些方法在JUnit4中被更灵活的`@Before`和`@After`注解取代。 在`JUnit & 简单Junit使用代码`这个文件中,可能包含了一个或多个示例,展示了如何创建测试类、编写测试方法、使用断言以及设置测试环境。例如,可能有...

    junit4 jar包 Java单元测试框架绿色免费版.zip

    为了更好地组织测试,JUnit4支持测试套件(Test Suite),通过`@Suite.SuiteClasses`注解可以将多个测试类组合在一起,一次性运行。这在处理多个相关的测试类时非常有用。 在进行单元测试时,有时我们需要模拟...

    junit4单元测试

    除此之外,JUnit4还支持参数化测试,通过`@Parameters`注解和`parameters()`方法可以为测试方法提供多组输入数据,实现对同一函数的多次测试。这对于测试具有多种输入情况的函数非常有用。 异常测试也是JUnit4的一...

    junit4 单元测试源码

    对于测试套件,JUnit4通过@RunWith注解可以指定运行器,比如Suite类,可以将多个测试类组合在一起运行,这对于批量测试非常有用。 总的来说,这个压缩包提供了学习JUnit4和进行单元测试的实战案例,对于理解如何在...

    junit4测试源码

    其次,JUnit4支持参数化测试,这意味着一个测试方法可以使用不同的参数多次执行。`@Parameters`注解用于提供参数数据,`@Parameterized.Parameters`方法返回一个包含参数的集合。 异常测试也是JUnit4的一个重要特性...

    Spring+JUnit4 +Ant测试报告

    Spring框架结合JUnit4和Ant构建的测试环境,能够有效地帮助开发者进行高效、可靠的测试。本篇将深入探讨如何利用这些工具进行测试,以及它们各自的关键功能。 首先,让我们了解Spring框架。Spring是Java企业级应用...

    Junit4单元测试入门例子

    Junit4作为Java领域最常用的单元测试框架,为开发者提供了方便、高效的测试工具。本文将深入探讨如何使用Junit4对名为Calculate的类进行单元测试,包括其加减乘除四个方法。 首先,我们需要了解Junit4的基本结构和...

    单元测试利器JUnit4

    JUnit4支持参数化测试,允许我们为同一个测试方法提供多组输入数据,以验证其在不同情况下的行为。`@Parameters`注解用于定义数据源,`@Test`注解的参数则会从数据源中获取。 6. 依赖注入(Dependency Injection)...

    单元测试利器 JUnit 4

    此外,JUnit 4还支持参数化测试,允许用不同参数多次运行同一个测试方法,提高了测试覆盖率。 总的来说,JUnit 4以其简洁的注解语法和强大的断言机制,使得单元测试变得高效且易于维护。它不仅帮助开发者编写可靠的...

    junit4学习文档

    JUnit4 是 JUnit 测试框架的一个重大更新版本,它充分利用了 Java 5 的注解(Annotation)特性来简化测试用例的编写过程。注解是一种元数据,用于描述程序中的元素如类、方法或变量的作用。与传统的关键字(如 ...

    Junit4单元测试必备入门教程

    JUnit4单元测试必备入门教程 JUnit4概述 -------- JUnit4是JUnit框架有史以来最大的改进,其主要目标是利用Java5的Annotation特性简化测试用例的编写。Annotation是一种元数据,用于描述数据。在Java中可以用来和...

Global site tag (gtag.js) - Google Analytics