- 浏览: 124315 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
netyjynixa:
这是因为耳部营养不够。
耳鸣也许有救了... -
stingh711:
static file本来就是用的绝对路径:)
My first ajax app using django and jquery -
supercode:
(r'^site_media/(?P<path>. ...
My first ajax app using django and jquery
被测试的类: 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.
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.
发表评论
-
inverse tip on hibernate
2006-12-11 23:14 571所有双向的关联必须有一端被设置为inverse.在一对多关联中 ... -
A Hibernate util written by groovy
2006-12-20 22:54 685Hibernate.groovy ... -
简单的浏览了一下MANIFEST.MF的用途
2007-10-10 11:10 627可以用的上的有: Main-Class 指定程序的入口,这样可 ... -
AJAX on java FAQ (zt)
2007-10-16 13:46 618https://blueprints.dev.java.net ... -
netbeans6.0 vs eclipse3.3
2007-12-26 17:48 619工作上一直用eclipse,最近使用了一些netbeans,发 ... -
Common used hsqldb running mode
2008-06-12 13:53 6301. Server mode: Start server: j ... -
How to use jetty in maven?
2008-10-28 11:42 862Add jetty plugin group to sett ... -
使用GroboUtils进行多线程测试
2006-06-24 00:27 1356被测试的类: Buffer.javapackage test; ... -
使用Spring中的Resource接口隔离对文件系统的依赖
2006-11-19 11:54 694在项目中,经常要用到读系统文件.在项目的遗留代码中,都是在系统 ... -
inverse tip on hibernate
2006-12-11 23:14 385所有双向的关联必须有一端被设置为inverse.在一对多关联中 ... -
使用httpclient发送soap message
2006-12-18 23:30 1803这两天在写一个tr069的si ... -
A Hibernate util written by groovy
2006-12-20 22:54 615Hibernate.groovy ... -
解决2000下设置classpath时报the input line is too long
2007-10-08 22:45 1055在2000下命令行长度好像不能超过2k bytes,超过就会报 ... -
简单的浏览了一下MANIFEST.MF的用途
2007-10-10 11:10 746可以用的上的有: Main-Class 指定程序的入口,这样可 ... -
AJAX on java FAQ (zt)
2007-10-16 13:46 653https://blueprints.dev.java.net ... -
netbeans6.0 vs eclipse3.3
2007-12-26 17:48 706工作上一直用eclipse,最近使用了一些netbeans,发 ... -
关于TimerTask的超诡异的一个bug
2008-02-27 16:05 905我们的程序在客户那儿run了4个月,都工作正常,最近报回来有问 ... -
08年的jolt大奖公布了
2008-03-10 10:30 670General book的得主是Beautiful code, ...
相关推荐
在使用GroboUtils进行多线程测试时,开发者需要注意以下几点: 1. 设计测试:明确测试目标,确保测试覆盖到多线程交互的关键路径。 2. 使用适当的同步机制:根据需要使用GroboUtils提供的同步工具,避免死锁和竞态...
《groboutils:多线程测试组件的卓越选择》 在软件开发过程中,单元测试是确保代码质量的重要环节。它允许开发者对程序中的每个模块进行独立验证,从而尽早发现和修复潜在问题。然而,随着多线程编程的普及,传统的...
GroboUtils-5.zip这个压缩包很可能包含了一些辅助进行Java多线程测试的工具或者库。 Java多线程允许程序同时执行多个任务,提高系统的效率和资源利用率。在Java中,实现多线程主要有两种方式:通过继承Thread类或...
GroboUtils-3 是一个专为进行多线程测试而设计的工具包,它提供了丰富的功能和接口,帮助开发者在复杂的应用场景下测试并优化多线程程序的性能和稳定性。在多线程编程中,确保并发执行的正确性和效率至关重要,因为...
总之,GroboUtils-5-core.jar是Java开发者进行多线程测试时的得力助手,它以丰富的功能、简洁的API和深度的Junit集成,降低了多线程测试的复杂性和难度,提高了测试的覆盖率和可靠性。无论你是经验丰富的测试工程师...
标题 "groboutils" 指的可能是一个开源工具库,主要用于多线程编程和测试,其中包含了一个核心组件 "groboutils-core-5.jar"。这个库的版本号为5,暗示了它可能经过多次迭代和优化,以提供更好的性能和稳定性。这个...
本文将深入探讨`groboutils-core-5`的主要特性和使用方法,以及其如何支持多线程测试。 首先,`groboutils-core-5`的核心在于其对Java单元测试的全面支持。单元测试是验证软件最小可独立运行单元的过程,如方法或类...
6. **性能测试**:除了基本的功能测试,GroboUtils 还支持进行性能测试,衡量在多线程环境下代码的运行效率,帮助优化代码性能。 7. **定制化测试**:GroboUtils 允许用户根据自己的需求定义测试规则和逻辑,提供...
groboutils-core-5.jar 单元测试多线程
这种测试通常会模拟多个用户同时访问系统,以检测潜在的线程安全问题、资源管理问题以及在高压力环境下的性能瓶颈。这一步对于确保软件在生产环境中能够可靠运行至关重要。 “自测jar包没有问题”意味着发布者已经...
`MutiThreadTest.java` 可能会使用这些工具来模拟并行执行的任务,测试目标接口在多线程环境下的行为。 在并发测试中,我们通常关注以下几个方面: 1. **性能测试**:衡量多线程环境下接口的响应时间和吞吐量,以...