被测试的类: 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多线程测试
Java多线程Junit测试包,支持多线程测试.
介绍有关Junit和多线程测试的问题。Junit和许多开源软件项目集成在一起,但是Junit执行多线程的单元测试有一些问题。这篇文章介绍Junit的一个扩展类库———GroboUtils
单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。
在Eclipse中使用JUnit4进行单元测试!
Unit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。...Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
使用JUnit进行单元测试PPT Spring 基于Aspectj 进行AOP编程的知识。 Aspectj快速参考文档
junit参数化测试的使用方法,数据驱动:数组,excel
软件测试JUnit测试框架的使用实验1报告
软件测试报告Junit的单元测试,框架的使用情况,适合正在学习的同学!
SpringBoot使用Junit进行单元测试,对如何在Springboot中使用Junit进行单元测试提供示例。
junit测试 test txt file
用Junit进行单元测试
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
Junit,测试Junit,测试案例使用
在Eclipse中使用JUnit4进行单元测试 在Eclipse中使用JUnit4进行单元测试
junit测试测试junit测试测试junit测试测试junit测试测试
JUNIT软件测试软件测试技术JUnit和单元测试入门简介软件测试1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。回归测试——软件或环境的修复或更正后...
junit3 junit4 api,单元测试的利器
Junit单元测试Junit单元测试Junit单元测试Junit单元测试