用NUnit2.1简单实现.net的测试驱动开发(TDD)

用NUnit2.1简单实现.net的测试驱动开发(TDD)
下面的例子很简单,就是实现两个整数的四则运算,TDD提倡测试优先,即先写测试用例,再写运行代码,刚下了个NUnit2.1,迫不及待的试了试……
1最初的测试用例
using System;
using NUnit.Framework;
namespace netshop
{
/// <summary>
/// 四则运算TestCls测试用例
/// Edit by spgoal
/// </summary>
[TestFixture]
public class TestCase
{
public TestCase()
{
}
private TestCls tc;
[SetUp]
public void setup()
{
tc=new TestCls();
}
[Test]
public void testAdd()
{

Assert.AreEqual(10,tc.Add(5,5));
Assert.AreEqual(7,tc.Add(3,4));
}
[Test]
public void testSub()
{
Assert.AreEqual(1,tc.Sub(5,4));
}
[Test]
public void testMul()
{
Assert.AreEqual(10,tc.Mul(2,5));
}
[Test]
public void testDiv()
{
Assert.AreEqual(2,tc.Div(10,5));
}
}
}

2 编译这个测试用例,理所当然的是通不过的,因为TestCls类未建立,于是建立该类,不必多说,看代码:
using System;

namespace netshop
{
/// <summary>
/// 四则运算的简单例子
/// </summary>
public class TestCls
{
public TestCls()
{
}
//加法
public int Add(int a,int b)
{
return 0;
}
//减法
public int Sub(int a,int b)
{
return 0;
}
//乘法
public int Mul(int a,int b)
{
return 0;
}
//除法
public double Div(int a,int b)
{
return 0;
}
}
}

这时编译通过,但由于里面的方法没实现,所以所有测试用例都失败。
(加载测试用例的方法是:先运行Nunit-Gui V2.1程序,然后在菜单file—open—选择测试用例所在工程目录的bin目录下的dll文件。)

3 于是编写加减乘除四个函数的实现:
using System;

namespace netshop
{
/// <summary>
/// 四则运算的简单例子
/// </summary>
public class TestCls
{
public TestCls()
{
}
//加法
public int Add(int a,int b)
{
return a+b;
}
//减法
public int Sub(int a,int b)
{
return a-b;
}
//乘法
public int Mul(int a,int b)
{
return a*b;
}
//除法
public double Div(int a,int b)
{
return a/b;
}
}
}

这时测试通过了!

4 寻找令测试失败的测试用例
想想似乎漏了一些可以使程序出错的测试用例,想到了吧?就是除数为零的情况,于是修改testDiv测试用例
[Test]
public void testDiv()
{
Assert.AreEqual(2,tc.Div(10,5));
Assert.AreEqual(0,tc.Div(10,0));//除于0的情况
}
果然,运行Nunit,出错了^_^ (这人有问题,出错了还笑-_-b)

于是修改TestCls类代码
//除法
public double Div(int a,int b)
{
if(b!=0)
{
return a/b;
}
else
{
return 0;
}
}
编译后,再运行Nunit,全部通过!

5 总结
这只是一个简单例子,因为以前用JUnit觉得还挺好用,于是想试试.net的Nunit是否好用,果然也不差:)测试优先只是测试驱动开发的一部分内容,还有重构等步骤,所以本文的题目有些名不副实,请大家多多包涵。

6 相关资料
NUnit下载地址: http://www.nunit.org/files/nunit-v21/Nunit-V2.1.4.msi
相关中文文章有:
[1]NUnit Cookbook(.net单元测试工具) http://www.csdn.net/develop/Read_Article.asp?Id=14908
[2] 在.NET环境中使用单元测试工具NUnit http://www.csdn.net/develop/Read_Article.asp?Id=22482
[3] NUnit快速入门 http://www.csdn.net/develop/Read_Article.asp?Id=23530
http://www.csdn.net/develop/Read_Article.asp?Id=23531
[4] NUnit 在VS.NET 2003上的插件 http://www.csdn.net/develop/Read_Article.asp?Id=26568

时间: 2024-11-08 18:14:34

用NUnit2.1简单实现.net的测试驱动开发(TDD)的相关文章

测试驱动开发(TDD)的思考

极限编程   敏捷开发是一种思想,极限编程也是一种思想,它与敏捷开发某些目标是一致的.只是实现方式不同.测试驱动开发是极限编程的一部分.   1.极限编程这个思路的来源     Kent Beck先生最早在其极限编程(XP)方法论中,向大家推荐"测试驱动"这一最佳实践,还专门撰写了<测试驱动开发>一书,详细说明如何实现.经过几年的迅猛发展,测试驱动开发已经成长为一门独立的软件开发技术,其名气甚至盖过了极限编程.[1]     2.为什么测试驱动开发在实践中难以开展   测试

详尽讲述用Python的Django框架测试驱动开发的教程_python

测试驱动开发(TDD)是一个迭代的开发周期,强调编写实际代码之前编写自动化测试. 这个过程很简单:     先编写测试.     查看测试失败的地方     编写足够的代码以使测试通过.     再次测试.     代码重构 .     重复以上操作. 为什么要用TDD? 使用TDD,你将学会把你的代码拆分成符合逻辑的,简单易懂的片段,这有助于确保代码的正确性. 这一点非常重要,因为做到下面这些事情是非常困难的:     在我们的脑中一次性处理所有复杂的问题.     了解何时从哪里开始着手解决

在C和C++开发过程中应用测试驱动开发的理念

测试驱动开发和现在流行敏捷开发的是分不开的,测试驱动开发是敏捷开发的一个强有力工具,可以帮助我们从简单的设计开始,逐步地有保护重构设计直至完善设计过程.测试驱动开发是 Kent 提出的一种新的软件开发流程,现在已广为人知,这种开发方法依赖于极短重复的开发周期,面对开发需求,http://www.aliyun.com/zixun/aggregation/7155.html">开发人员要先开发代码测试用例,这些代码实现的测试用例定义了工程要实现的需求, 然后去开发代码快速测试通过这这些用例,这

Android测试驱动开发实践1

在正式进行Android测试驱动开发之前,不得不先提一下Android应用架构问题.在传统软件开发中,MVC架构得到了广泛的应用,然而在Android开发中,很少见应用采用了MVC架构(不要说Android及Widget全部采用的是MVC架构,那是系统的事,我们讲的是应用程序开发),究其原因可能是初期Android应用大多较为简单,没有采用的必要,而后期一直在沿用初期的习惯.但是遇到一些复杂的应用,例如同样的数据在多个Activity中显示,如果数据分散在多个Activity中,那么数据发生更新

《重构与模式(修订版)》—第1章1.4节测试驱动开发和持续重构

1.4 测试驱动开发和持续重构 重构与模式(修订版) 测试驱动开发[Beck, TDD]和持续重构,是极限编程诸多优秀实践中的两个,它们彻底改进了我开发软件的方式.我发现,这两个实践能够帮助我和公司降低过度设计和设计不足的几率,将时间用在按时地构造出高质量.功能丰富的代码上. 通过测试驱动开发(TDD)和持续重构,我们将编程变成一种对话1,从而高效地使可以工作的代码不断演变. 问:编写一个测试,向系统提问. 答:编写代码通过这个测试,回答这一提问. 提炼:通过合并概念.去芜存菁.消除歧义,提炼你

简单快捷实现ASP在线发邮件功能

发邮件|在线 简单快捷实现ASP在线发邮件功能 -------------------------------------------------------------------------------- 在编写网上应用程序时,经常碰到需要在线发送邮件的问题,邮件内容是由程序动态决定的,如果你采用的是ASP方式来编写网上应用程序,如何简单.快捷地实现这一功能呢? 笔者在实践中利用ASP的com组件功能,在vb中实现了一个发邮件的小组件,在ASP中只通过轻松调用,就可以实现该功能.所有邮件处理

网络相册开发(3)——测试驱动开发(TDD)

测试驱动开发的理论已经提出好多年了,在这里关于他的原理和优势我就不多说了,我将大略的写一下我在实际中运用TDD的过程. 补一个jar: commons-pool-1.4.jar 过程 1.搭建测试用例运行环境 2.编写接口类 3.针对接口类编写测试用例 4.实现接口类,编写对应的功能代码 5.运行测试 6.如不通过,修改直至通过 7.循环完成其他功能 搭建测试用例运行环境 spring采用的依赖注射技术带来的一个主要好处就是你的代码对容器的依赖性比传统的J2EE开发小得多.配合spring提供的

测试驱动开发实践之重构篇

前一篇文章 测试驱动开发实践-入门篇 我们我们讲了一些基本的测试驱动开发流程: 1.写单元测试使他亮红灯 2.写代码使测试变成绿灯 3.重构代码 接下来我们需要开始重构了,大家有可能会问,为什么需要重构,什么时候开始重构. 对与为什么需要重构,其实就是为了使代码结构清晰,去除一些重复的代码,比如我们执行sql语句操作,我们起初这样写 Code 1private connStr="server=.;database=TestDB;uid=sa;pwd=123" 2public int A

Android测试驱动开发实践2

在实际项目开发过程中,一般先实现核心功能,最后再做辅助性功能,这样可以尽快验证Idea的正确性,同时有助于让老板.投资人或客户看到可运行的产品,从而对产品充满信心,加大对项目的支持. 但是对于我们这个项目而言,我们首先需要得到一个Android应用MVC的架构体系,因此我们首先来实现一些典型功能,但是可以完整体现MVC架构的功能.在此我们选择任何应用程序在启动时都会显示的Splash页面,通常这个页面会显示一个应用图片,过30秒左右再显示程序的主界面,应用在这段时间完成数据加载等准备工作. 在这