惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
V
Visual Studio Blog
雷峰网
雷峰网
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
C
Check Point Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
D
Docker
IT之家
IT之家
博客园 - 聂微东
腾讯CDC
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog

博客园 - csu02

erp asp+com 删除表的一列 更改列名 分页 千万数量级分页存储过程 XML的五种用途~ 表的列数 列名 得到一个省份,城市数据库 window.open()的所有参数列表 存儲過程解密SQL 分页控件 返回存儲過程的多個輸出字段 SqlCommand 与 SqlDataAdapter 产生一个int数组,长度为100,并向其中随机插入1-100 dataGrid使用 绑定 定向到Url 学到的程序结构 几个系统 利用IFRAME 让每个页面都继承菜单控 不是用户自定义控件来实现的 C#事件机制学习
完成单元测试
csu02 · 2006-06-29 · via 博客园 - csu02

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]单元标记为绿灯,否则为红灯并提示错误。