`
stingh711
  • 浏览: 124315 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

使用GroboUtils进行多线程测试

    博客分类:
  • java
阅读更多
被测试的类: 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和多线程测试的问题

    在使用GroboUtils进行多线程测试时,开发者需要注意以下几点: 1. 设计测试:明确测试目标,确保测试覆盖到多线程交互的关键路径。 2. 使用适当的同步机制:根据需要使用GroboUtils提供的同步工具,避免死锁和竞态...

    多线程测试组件groboutils

    《groboutils:多线程测试组件的卓越选择》 在软件开发过程中,单元测试是确保代码质量的重要环节。它允许开发者对程序中的每个模块进行独立验证,从而尽早发现和修复潜在问题。然而,随着多线程编程的普及,传统的...

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

    GroboUtils-5.zip这个压缩包很可能包含了一些辅助进行Java多线程测试的工具或者库。 Java多线程允许程序同时执行多个任务,提高系统的效率和资源利用率。在Java中,实现多线程主要有两种方式:通过继承Thread类或...

    GroboUtils-3

    GroboUtils-3 是一个专为进行多线程测试而设计的工具包,它提供了丰富的功能和接口,帮助开发者在复杂的应用场景下测试并优化多线程程序的性能和稳定性。在多线程编程中,确保并发执行的正确性和效率至关重要,因为...

    GroboUtils-5-core.jar

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

    groboutils

    标题 "groboutils" 指的可能是一个开源工具库,主要用于多线程编程和测试,其中包含了一个核心组件 "groboutils-core-5.jar"。这个库的版本号为5,暗示了它可能经过多次迭代和优化,以提供更好的性能和稳定性。这个...

    groboutils-core-5

    本文将深入探讨`groboutils-core-5`的主要特性和使用方法,以及其如何支持多线程测试。 首先,`groboutils-core-5`的核心在于其对Java单元测试的全面支持。单元测试是验证软件最小可独立运行单元的过程,如方法或类...

    GroboUtils-5-core

    6. **性能测试**:除了基本的功能测试,GroboUtils 还支持进行性能测试,衡量在多线程环境下代码的运行效率,帮助优化代码性能。 7. **定制化测试**:GroboUtils 允许用户根据自己的需求定义测试规则和逻辑,提供...

    groboutils-core-5.jar

    groboutils-core-5.jar 单元测试多线程

    groboutils-core-5.jar.7z

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

    java并发测试

    `MutiThreadTest.java` 可能会使用这些工具来模拟并行执行的任务,测试目标接口在多线程环境下的行为。 在并发测试中,我们通常关注以下几个方面: 1. **性能测试**:衡量多线程环境下接口的响应时间和吞吐量,以...

Global site tag (gtag.js) - Google Analytics