`

Junit多线程测试 使用GroboUtils进行多线程测试

阅读更多

被测试的类: Buffer.java

package test;

import java.util.HashMap;
import java.util.Map;


/**
 *
 * @author sting
 */
public class Buffer {
    private static Buffer me = new Buffer();
   
    public static Buffer getInstance() {
        return me;
    }
   
    private Map<String, Integer> buff;
   
    private Buffer() {
        this.buff = new HashMap<String, Integer>();
    }
   
    public void put(String key, int value) {
            if (!(this.buff.containsKey(key))) {
                this.buff.put(key, value);
        }
    }
   
    public int get(String key) {
            if (this.buff.containsKey(key)) {
                return this.buff.get(key);
            }
            return 0;
    }
}


TestCase: BufferTest.java
package test;

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


/**
 *
 * @author sting
 */
public class BufferTest extends TestCase {
    private Buffer buff;
   
    protected void setUp() throws Exception {
        super.setUp();
        buff = Buffer.getInstance();
    }

    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void test() throws Throwable {
        TestRunnable[] runnables = new TestRunnable[] {
                new WriteToBuffer(buff, 10),
                new GetFromBuffer(buff, 10)
        };
       
        MultiThreadedTestRunner testRunner =
                new MultiThreadedTestRunner(runnables);
        testRunner.runTestRunnables();
    }
   
    private static class WriteToBuffer extends TestRunnable {
        private int value;
        private Buffer buff;
       
        public WriteToBuffer(Buffer buff, int value) {
            this.buff = buff;
            this.value = value;
        }
       
        @Override
        public void runTest() throws Throwable {
            buff.put("sting", value);
        }
    }
   
    private static class GetFromBuffer extends TestRunnable {
        private int value;
        private Buffer buff;
       
        public GetFromBuffer(Buffer buff, int value) {
            this.buff = buff;
            this.value = value;
        }
       
        @Override
        public void runTest() throws Throwable {
            assertEquals(value, buff.get("sting"));
        }
    }
}


运行该test case,结果如下:
WARN [Thread-1] (MultiThreadedTestRunner.java:276) - A test thread caused an exception.
junit.framework.AssertionFailedError: expected:<10> but was:<0>
    at junit.framework.Assert.fail(Assert.java:47)
    at junit.framework.Assert.failNotEquals(Assert.java:282)
    at junit.framework.Assert.assertEquals(Assert.java:64)
    at junit.framework.Assert.assertEquals(Assert.java:201)
    at junit.framework.Assert.assertEquals(Assert.java:207)
    at test.BufferTest$GetFromBuffer.runTest(BufferTest.java:75)
    at net.sourceforge.groboutils.junit.v1.TestRunnable.run(TestRunnable.java:154)
    at java.lang.Thread.run(Unknown Source)

把Buffer.java加上同步处理:
public class Buffer {
    private static Buffer me = new Buffer();
   
    public static Buffer getInstance() {
        return me;
    }
   
    private Map<String, Integer> buff;
   
    private Buffer() {
        this.buff = new HashMap<String, Integer>();
    }
   
    public void put(String key, int value) {
        synchronized (this) {
            if (!(this.buff.containsKey(key))) {
                this.buff.put(key, value);
            }
        }
    }
   
    public int get(String key) {
        synchronized (this) {
            if (this.buff.containsKey(key)) {
                return this.buff.get(key);
            }
            return 0;
        }
    }
}

测试通过。

这里只是用最简单的code演示了一下如何使用GroboUtils里面提供
TestRunnable和 MultiThreadedTestRunner来编写多线程的测试代码。其实也可以自己写code去测试,不过已经有人写了,不用再重复去做了。Please refer to http://broboutils.sourceforge.net to get more information.

分享到:
评论

相关推荐

    JUNIT多线程测试

    本篇将深入探讨如何在JUnit中进行多线程测试,以及它的重要性。 首先,理解为什么需要进行多线程测试。在多线程环境中,不同的线程可能同时访问共享资源,这可能导致竞态条件、死锁或数据不一致等问题。因此,我们...

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

    在多线程环境中使用JUnit进行测试会面临一些挑战,比如如何确保测试的线程安全,避免测试结果的不确定性,以及如何有效地模拟并发情况。GroboUtils-5可能就是为了解决这些问题而设计的工具集,它可能包含了用于创建...

    多线程测试组件groboutils

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

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

    首先,GroboUtils为JUnit提供了一种名为`ThreadControl`的接口,它允许开发者暂停、恢复或终止测试线程。这样,我们可以在特定时刻检查测试对象的状态,确保它们在预期的时间点完成了预期的操作,避免了由于线程间的...

    单元测试之道(Java):使用JUnit进行单元测试

    单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。

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

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

    实验5 JUnit测试框架的使用.doc

    JUnit 测试框架的使用 JUnit 是一个流行的单元测试框架,广泛应用于 Java 项目中,本文将详细介绍 JUnit 测试框架的使用,并提供了两个示例来帮助读者更好地理解和掌握 JUnit 的使用。 一、JUnit 测试框架的使用 ...

    junit参数化测试的使用方法

    ### JUnit参数化测试的使用方法 #### 一、引言 JUnit是Java开发中最常用的单元测试框架之一,它提供了一种简单的方式来编写可重复执行的测试案例。随着软件复杂度的增加,对于某些功能模块可能需要多次使用不同的...

    使用JUnit进行单元测试PPT

    【使用JUnit进行单元测试】 单元测试是软件开发过程中的重要环节,它主要目的是验证程序的各个独立组件(如方法或类)是否按照预期工作。JUnit是Java编程语言中最常用的单元测试框架,它允许开发者创建和运行针对...

    groboutils

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

    基于Junit的ATM测试

    【基于Junit的ATM测试】是针对自动取款机(ATM)系统进行的一种软件测试方法,它利用Java编程语言以及JUnit测试框架来验证ATM系统的功能正确性。JUnit是一个广泛使用的Java单元测试框架,它允许开发者编写可重复运行...

    Ant 使用Junit进行单元测试

    接下来,我们将深入探讨如何使用Ant结合JUnit进行单元测试。 首先,我们需要了解Ant的基本概念。Ant是一个由Apache基金会开发的任务驱动的构建系统,它的核心是build.xml文件,这是一个XML格式的脚本,定义了构建...

    Junit测试案例使用

    Junit 测试案例使用 从 Junit 测试案例的标题、描述、标签和部分内容中,我们可以提取出...Junit 测试案例使用涉及了 Junit 测试的概念、本质、优点、分类、下载和安装、架构、命令模式、测试步骤等多方面的知识点。

    Junit4单元测试源码

    Unit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。...Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

    GroboUtils-5-core.jar

    总之,GroboUtils-5-core.jar是Java开发者进行多线程测试时的得力助手,它以丰富的功能、简洁的API和深度的Junit集成,降低了多线程测试的复杂性和难度,提高了测试的覆盖率和可靠性。无论你是经验丰富的测试工程师...

    用Junit进行单元测试

    本文将深入探讨如何使用Junit进行单元测试,包括其基本概念、安装与配置、断言的使用、测试注解以及测试套件的组织。 首先,了解单元测试的基本概念。单元测试是对程序中最小可测试单元进行检查和验证,通常是函数...

    自动饮料机Junit测试(软件测试与质量保证实验).rar

    通过这样的实验,学生将学习如何创建测试类,定义测试方法,使用Junit的断言来验证结果,并理解测试驱动开发(TDD)的理念,即先写测试再写实现。 总之,"自动饮料机Junit测试"实验是实践软件测试理念和技巧的有效...

Global site tag (gtag.js) - Google Analytics