怎么测试对象池

aimeast 2012-01-02 11:50:25
很久没发帖了,今天来水一个!

问题是这样的:我用特殊方法实现了一个对象池,并且通过了简单的测试。怎么才能非常完善的测试一个对象池是的实现否是正确的。

为了方便讨论,先贴一个标准的对象池的实现代码,大家可以假设这个实现有缺陷,对其进行测试。

using System;

namespace TEST
{
public sealed class ObjectPool<T> : IPool<T>
where T : class
{

private readonly Func<T> _creater = null;
private readonly Action<T> _rester = null;
private readonly T[] _objs = null;
private readonly int _capcity;

private int _remainer;

public ObjectPool(int capcity, Func<T> creater = null, Action<T> rester = null)
{
_capcity = _remainer = capcity;
_creater = creater;
_rester = rester;
_objs = new T[capcity];
for (int i = 0; i < capcity; i++)
_objs[i] = creater();

}

public int Capcity { get { return _capcity; } }
public int Remainer { get { return _remainer; } }

public T Fetch()
{
if (_remainer <= 0)
throw new Exception();

lock (_objs)
{
return _objs[--_remainer];
}
}
public void Store(T obj)
{
if (_remainer >= _capcity)
throw new Exception();

if (_rester != null)
_rester(obj);
lock (_objs)
{
_objs[_remainer++] = obj;
}
}
}
}
...全文
197 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
aimeast 2012-01-03
  • 打赏
  • 举报
回复
@sp1234,@Sandy945

两位大哥,目前的需求就是这样,只需要实现IPool<T>即可。其作用应该是很容易看明白的。
现阶段的测试主要是为了验证其正确性。
铜臂阿铁木 2012-01-03
  • 打赏
  • 举报
回复
我就看看 我不说话
熙风 2012-01-03
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
最后再连一个观点。所谓测试,不可能测试出你正确了。你这个基本概念没有搞明白。测试只能说你测试过了,不可能说你今天正确了、以后就不会再出现bug了。
  • 打赏
  • 举报
回复
有很多现成的集合,例如 List<T>、LinkedList<T>、Queue<T>、Dictionary<K,T>、SortedList<K,T> 等等。不知道“对象池”有什么不一样的?最好你考虑兼容这些东西的一两个基础接口。

凭空出现一个东西,让别人来“非常完善的测试”,这就好像你说你连过葵花宝典,让别人都来“非常完善地”测试你,谁愿意呢?谁有你更知道葵花宝典是干什么用的呢?
ximenwuji 2012-01-03
  • 打赏
  • 举报
回复
厉害,向老大们学习
  • 打赏
  • 举报
回复
干什么用的呢?
阿非 2012-01-03
  • 打赏
  • 举报
回复
Func<T> creater = null

_objs[i] = creater();
--------------------------
creater 不能为null,为null要显式抛出 ArgumentException
=======================================================
if (_remainer <= 0)
throw new Exception();

应该布尔值来区分,真要使用异常 也要有明确的提示信息。

===================================

lock 用的有问题

shift3325 2012-01-02
  • 打赏
  • 举报
回复
呵呵 坐个沙发 对象池。。 呵呵 受教了 不过 还没学到那个程度 谢谢楼主

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧