小 牛

博客园 首页 新随笔 联系 订阅 管理
C# 数据结构之测试篇
内容简介:
本文主要通过使用C#描述的线性存储的栈和利用NUnit工具编写相应的测试用例来学习和理解如何把一些基础知识和单元测试联系在一起,虽然本文是使用C#描述的数据结构单元测试,但这种思想本身和程序设计语言无关。
本文需要的前导知识包括C#程序设计语言和数据结构基础。
正文;
首先请确认下面3句程序设计不变的道理:
(1)数据结构是程序设计最本质的灵魂。
(2)测试作为程序质量保证的基础。
(3)单元测试又是最小函数和功能的测试。
通过上面3个道理,可以很容易推到出来一个软件数据结构的单元测试是整个程序的最基层测试。
我个人认为对于数据结构的单元测试最佳的方法是通过数据结构的抽象类图来编写单元测试用例。因为这样可以更加准确地测试数据结构的结构性。
在C#程序设计中单元测试最常用的工具就是NUnit单元测试工具。NUnit单元测试工具和整个.NET平台一样本质还是一个函数库。在www.nunit.org免费下载到NUnit工具及其原代码。
(安装NUnit工具的步骤这里省略,请参考www.nunit.org的文档)
下面通过一个简单的数据结构实例来体验如何编写数据结构的测试用例。
(1)构造需要数据结构的类图
类名: Stack
方法:
名称:Stack(int)| 类型:void |作用:构造函数
名称:IsEmpty() | 类型:bool |作用:判断栈是否为空
名称:Push(object) |类型:void |作用:压栈操作
名称:Pop() | 类型:void |作用:弹栈操作
名称:Top() | 类型:object|作用:显示栈顶
属性:
名称:CurrentLength|类型:int |作用:显示当前存储元素
成员:
      名称:data | 类型:object[] |作用:存储元素
名称:idx | 类型:int |作用:标记存储点
(2)更加数据结构的类图编写代码
public class Stack
{
private object[] data;
private int idx;
public Stack(int Max)
{
data = new object[Max];
idx = 0;
}
public bool IsEmpty()
{
return idx == 0;
}
public void Push(object Data)
{
if(idx<data.Length)
data[idx++] = Data;
else new Exception("index > max");
}
public void Pop()
{
if(idx!=0)idx--;
else new Exception("index < 0");
}
public object Top()
{
return data[idx-1];
}
public int CurrentLength
{
get
{
return idx;
}
}
}
(3)更加类图编写测试用例
单元测试用例的编写是编写一些操作后对比和设想结果是否一致。
在编写测试用例前需要引入 NUnit的命名空间;
using NUnit;
using NUnit.Framework;
这里需要注意,需要将测试用例封装在一个标记为[TestFixture]的类中。
对于每个测试用例需要标记[Test]。
下面就是更加上面栈的类图编写的测试用例。
[TestFixture]
public class StackUnitTest
{
/// <summary>
/// 测试栈的Push操作
/// </summary>
[Test]
public void PushTest()
{
Stack stack = new Stack(100);
for(int i = 1 ; i < 100 ; i++)
{
stack.Push(i);
Assertion.AssertEquals(stack.CurrentLength,i);
}
}
/// <summary>
/// 测试栈的Empty操作
/// </summary>
[Test]
public void EmptyTest()
{
Stack stack = new Stack(100);
Assert.IsTrue(stack.IsEmpty());
}
/// <summary>
/// 测试栈的Pop操作
/// </summary>
[Test]
public void PopTest()
{
Stack stack = new Stack(100);
for(int i = 1 ; i < 100 ;i++)
{
stack.Push(i);
stack.Pop();
Assertion.AssertEquals(stack.CurrentLength,0);
}
}
/// <summary>
/// 测试栈的Top操作
/// </summary>
[Test]
public void TopTest()
{
Stack stack = new Stack(100);
for(int i = 1 ; i < 100 ;i++)
{
stack.Push(i);
Assertion.AssertEquals(i,stack.Top());
}
}
}
(4) 将单元测试用例编译为dll文件在nunit环境下测试
Nunit默认提供了GUI和Console两种测试环境,这里推荐直接使用NUnit-gui中打开编译好的测试用例dll文件,之后选择运行后,可以看到如果测试通过所有[Test]单元标记为绿灯,否则为红灯并提示错误。

posted on 2006-06-29 16:42  csu02  阅读(440)  评论(0编辑  收藏  举报