测试驱动开发
1. 引言
1.1. 介绍
TDD过程:
1、编写用来测试的代码(测试不能通过,因为没有为应用程序编写实际代码)
2、编写应用程序代码,使测试通过
3、重构已有的代码
其它的xUnit家族版本通常都有一个base class(基础类)
测试先行"开发代码过程中的主要工作之一
1.2. 测试驱动开发有什么好处
工匠的故事:
工匠一:先拉上一根水平线,砌每一块砖时,都与这根水平线进行比较,使得每一块砖都保持水平。
工匠二:先将一排砖都砌完,然后拉上一根水平线,看看哪些砖有问题,再进行调整。
2. .NET中的单元测试工具
Unit Testing Tool List:
1). NUnit
2). NUnitAddin
3). NUnitAsp
4). csUnit
6). X-Unity - MIIK Ltd.
7). HarnessIt - United Binary
8). SilkPerformer .NET Explorer - Segue
10).DotUnit
2.1. NUnit
.2.1.1. <实例>
.2.1.2. NUnit执行顺序
[TestFixtureSetUp] // 只运行一次
---[SetUp]---
[Test] Test1
---[TearDown]---
---[SetUp]---
[Test] Test2
---[TearDown]---
---[SetUp]---
[Test] Test3
---[TearDown]---
[TestFixtureTearDown] // 只运行一次
3. 测试用例
任务简述
队列是一种在程序开发中十分常用的数据结构,在此我就以编写一个实现队列功能的类--Queue为例进行说明。该类将实现以下基本运算:
判断队列是否为空:empty()
插入队列(即在队列未尾增加一个数据元素):inqueue(x)
出队列(也就是将队列首数据元素删除):outqueue()
取列头(也就是读者队列首数据元素的值):gethead()
清空队列(也就是将队列的所有数据元素全删除): clear()
查询x在队列中的位置:search(x)
测试案例分析
在测试驱动开发实践中,第一步就是考虑测试方案,通过分析该类的功能,我们可以得到以下测试案例:
1) 队列为空测试
TC01: 队列新建时,应为空;
TC02: 清空队列后,应为空;
TC03: 当出队列操作次数与插入队列操作次数一样时,应为空;
2) 插入队列测试:
TC04: 插入队列操作后,新数据元素将插入在队列的未尾;
TC05: 插入队列操作后,队列将一定不为空;
3) 出队列测试
TC06: 出队列操作后,第一个数据元素将被从队列中删除;
4) 取队头测试
TC07: 取队头操作将获得队列中的第一个数据元素。
5) 清空队列测试
TC08: 清空队列操作后,队列将为空队列;
注: 此处为了讲解的方便,并未将所有的测试用例都列出,同时也选择了一些十分简单的测试用例。
4. NUnit.Framework
// 特征
Attribute
Test--
TestFixture--
TestFixtureSetUp--
TestFixtureTearDown--
SetUp--
TearDown--
ExpectedException--
Ignore--
Suite--
// 断言
Assert
AreEqual()
AreSame()
Fail()
IsFalse()
IsNotNull()
IsNull()
IsTrue()
Assertion
Assert()
AssertEquals()
AssertNotNull
AssertSame()
Fail()
TestCase
SetUp()
TearDown()
5. 相关资源
《测试驱动开发》
《敏捷软件开发》
《拥抱变化: 解析极限编程》
http://www.51cmm.com/SoftTesting/No108.htm