`

.NET开源项目介绍及资源推荐:单元测试

 
阅读更多
说到单元测试,大家首先会想到NUnit,但对于NUnit来说还存在着一些不足,比如说它不能够与VS.NET IDE集成、扩展能力比较差等,除此之外我们还需要一些自动化的测试工具,本文将简单介绍一下如下几种单元测试工具以及推荐一些学习资源。
1.NUnit
2.TestDriven.Net
3.NUnitForms
4.NUnitAsp
一.NUnit
提起大名鼎鼎的NUnit,我想没有几个不知道吧?NUnit是一个专门针对于.NET的单元测试框架。在这之前有针对Java的JUnit,针对C++的CPPUnit,它们都是属于xUnit家族。 NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等,最重要的一点是它适合于所有.NET语言。
编写一段简单的单元测试代码:
的使用非常简单,运行后如下图所示:
[TestFixture]
publicclassTestDatabase
{
[Test]
publicvoidTestWithDebugger()
{
ClassAca
=newClassA();
intexpected=3;
intresult=ca.GetResult();
Assert.AreEqual(expected,result);
}

}
NUnit
NUnit虽然在使用上非常简单,赢得了一部分用户,甚至于微软在企业库的源码中也提供了使用NUnit测试的版本,但是NUnit让我最不爽的地方是没有提供Visual Studio IDE插件,这样如果做单元测试,会发现自己每天忙于奔波于IDE和NUnit GUI之间,不停的在切换窗口;还有一点NUnit虽然跟JUnit是兄弟,但是它的威望和能力相较Junit就差远了,尤其是扩展能力,后面我会介绍到一个NUnit的WinForm插件。
官方主页:http://www.nunit.org/
学习资源
1.NUnit的官方文档
2.园子里LIVE的NUnit详细使用方法
个人认为,看以上两篇中文资料足以学会NUnit的使用,它的难点在于测试用例的编写上,而不是工具本身的使用。

二.TestDriven.Net
TestDriven.Net列在开源项目介绍里面其实有些不太合适,因为它现在已经是一种商业化的工具,只有个人版可以免费下载使用,个人认为在开发中个人版的功能已经足够了,之所以我要把它放在这里介绍,是因为它太优秀了。前面说的NUnit,虽然使用非常简单,但是它不能与我们的.NET开发环境集成起来,而TestDriven.Net就是这样一款以插件的形式集成在Visual Studio中的单元测试工具,它的前身是NUnitAddIn,由Jamie Cansdale大师开发,一开始作者只是想做一个NUnit插件集成到Visual Studio中,经过多次版本更新,NUnitAddIn在2004年9月底更名为TestDriven.NET,并在当年的12月初发布了它的第一个Release版本,即TestDriven.NET 1.0。在今年的10月底,终于迎来了TestDriven.NET 2.0版本的发布,最新的2.0版本集成了.NET Reflector、NConver、NConverExplorer、TypeMock.NET等,功能更加强大,我们还是使用前面的例子:
[TestFixture]
publicclassTestDatabase
{
[Test]
publicvoidTestWithDebugger()
{
ClassAca
=newClassA();
intexpected=3;
intresult=ca.GetResult();
Assert.AreEqual(expected,result);
}

}
它所有的操作都是通过IDE中的右键菜单完成,如下图所示:
由于跟IDE的集成,可以使我们很快的定位到出错的代码行:
学习资源
由于TestDriven.Net的使用非常简单,所以目前基本没有什么中文文章介绍,大家可以参考一下官方网站上的QuickStart以及我在06年12月份《程序员》杂志上写的一篇关于TestDriven.Net的文章。
三.NunitForms
NUnitForms从命名上看,就知道它跟NUnit有关,没错,它是NUnit的一个WinFrom的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以非常容易的用它为你的Windows Forms类进行自动化测试,它提供了一个Recorder Application,来记录你的操作。我们编写类似于如下代码片断的测试代码:
ButtonTesterbutton=newButtonTester("buttonName","formName");

ControlTestertextBox
=newControlTester("nameOfSomeTextBox");

Assertion.AssertEquals(
"defaultText",textBox["Text"];

textBox[
"text"]="newText";
或者类似于这样的代码进行操作记录:
//recordsbutton.Click()
publicvoidClick(objectsender,EventArgsargs)
{
listener.FireEvent(TesterType,sender,
"Click");
}


//records:comboBox.Enter("text");
publicvoidTextChanged(objectsender,System.EventArgse)
{
listener.FireEvent(TesterType,sender,
"Enter",((ComboBox)sender).Text);
}


//records:comboBox.Select(3);//textofitem3
publicvoidSelectedIndexChanged(objectsender,System.EventArgse)
{
EventActionaction
=newEventAction("Select",((ComboBox)sender).SelectedIndex);
action.Comment
=((ComboBox)sender).Text;
listener.FireEvent(TesterType,sender,action);
}
对于NUnitForms,它还有一个兄弟工具叫NUnitASP,
学习资源
对于NUnitForms,仍然是没有发现有好的中文资源,大家可以参考官方文档
四.NUnitAsp
NUnitAsp可以说是NUnitForms的兄弟,它也是一个NUnit的扩展,用来自动测试ASP.NET页面。虽然NunitAsp可以完成一些ASP.NET页面的自动化测试工作,但是在编写测试用例的时候,如果界面上的元素比较多,编写起来会非常的麻烦,这也是为什么NunitAsp一直处于大紫不红的原因。它可以编写如下代码片断的测试代码:
publicvoidTestLayout()
{
TextBoxTestername
=newTextBoxTester("name",CurrentWebForm);
TextBoxTestercomments
=newTextBoxTester("comments",CurrentWebForm);
ButtonTestersave
=newButtonTester("save",CurrentWebForm);
DataGridTesterbook
=newDataGridTester("book",CurrentWebForm);

Browser.GetPage(
"http://localhost/GuestBook/GuestBook.aspx");

AssertVisibility(name,
true);
AssertVisibility(comments,
true);
AssertVisibility(save,
true);
AssertVisibility(book,
false);
}


publicvoidTestSave()
{
TextBoxTestername
=newTextBoxTester("name",CurrentWebForm);
TextBoxTestercomments
=newTextBoxTester("comments",CurrentWebForm);
ButtonTestersave
=newButtonTester("save",CurrentWebForm);
DataGridTesterbook
=newDataGridTester("book",CurrentWebForm);

Browser.GetPage(
"http://localhost/GuestBook/GuestBook.aspx");

name.Text
="Dr.Seuss";
comments.Text
="OneGuest,TwoGuest!GuestBook,BestBook!";
save.Click();
}
学习资源
跟自己的兄弟NUnitForms一样,仍然没有好的中文文档,有兴趣的朋友可以参考‘NUnitAsp的官方文档,相对来说还是比较全的,有很多的教程。
总结
对于单元测试工具,就简单的介绍这么多,我个人还是推荐使用TestDriven.Net的个人版,至于后面两个NUnit的扩展,大家可以参考一下,在实际开发中用它们来测试会很麻烦,至少我目前不敢去做这个尝试。还有一个非常值得推荐的单元测试工具Mbunit,有兴趣的朋友可以关注一下,我对它了解并不多。
本来想在文章中再介绍一下开源的Mock框架的,感觉太多了,只好单独放一篇文章来介绍了。
分享到:
评论

相关推荐

    毕设&课设&项目&实训-先进的.NET MVC开源工作流快速开发平台 .zip

    先进的.NET MVC开源工作流快速开发平台 - RoadFlow RoadFlow是一款集成工作流引擎的ASP.NET MVC快速开发平台,由从事多年工作流开发与实施的技术团队开发。该工作流平台是根据多年对企事业单位工作流应用经验总结而...

    vb.net 坦克大战 小游戏程序源码

    全开源代码,测试请注意开启键盘大写。控制方式:大写的J K L I 控制坦克方向,F发弹 二、注意事项 1、开发环境为Visual Studio 2013,使用.net 4.0开发。 适合人群:新手及有一定经验的开发人员

    毕设&课设&项目&实训-仓库管理系统,移动端APP开源项目,支持Android、iOS,基于.NET(C#、VB).zip

    毕设&课设&项目&实训-仓库管理系统,移动端APP开源项目,支持Android、iOS,基于.NET(C#、VB)。SmoWMS仓库管理系统 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、...

    Pro .NET Best Practices .net最佳实践 英文版

    第12章综合介绍多种商业的及开源的测试框架和工具。第四部分(第13章)告诉你如何说服对采用最佳实践存在反感和偏见的组织和个人。本书还附有评估、跟踪最佳实践的记分卡。 译者序 前言 第1章 冷静待之 1.1 实践...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    Legened1.0编译、运行演示视频

    此视频简单的演示了,legend1.0的编译过程,运行测试过程,欢迎喜欢的朋友下载使用。如果下载不成功或视频文件有问题,请发邮件至yuembed@126.com索取 Legend交流群:49288783,欢迎加入 源码下载: ...

    开源进销存管理系统(ASP.NET MVC3 Linq to SQL)

    本程序是一个开源的进销存管理系统。 本系统为 VS2010 开发,数据库为 MSSQL2008R2,使用了 MVC3 Linq to SQL 技术实现。 本程序推荐使用浏览器为 IE8,使用其他浏览器可能会出现页面布局混乱现象。 数据库中是...

    Blog程序开源:X2Blog

    X2Blog的目标是提供一个具有... 本系统使用了两个出色的开源项目如下: 基于web的html编辑器asp.net控件,地址是:http://www.fckeditor.net/ 浏览器端Javascript的一个开发框架prototype:http://prototype.conio.net/

    ihrm_test:人力资源测试代码

    ihrm_test:人力资源测试代码

    毕设&课设&项目&实训-基于Asp.Net Core 5.0采用Quartz.Net编写的开源任务调度Web管理平台.zip

    【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++...

    GoldArch.net框架源码

    目前的目标是应用这种组合做一款开源的人力资源系统。 现在发布的是第一阶段的代码: 应用Spring.net+NHibernate实现数据持久. 封装了泛型DAO和泛型Service 通过配置,已经实验通过双数据库的方案 今后是准备权限与...

    仓库管理系统,移动端APP开源项目,支持Android、iOS,基于.NET(C#、VB) SmoWMS仓库管理系统.zip

    【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++...

    毕设&课设&项目&实训-优秀的开源的用于响应式Web开发的HTML5 JavaScript组件套件。.zip

    为了推广学习DevExtreme在Asp.Net.Core中的应用,本源码在DevExpress19.2.4产品发布的基础上, 专门对DevExtreme进行了Asp.Net… 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化...

    单元测试框架-TestNG-的eclipse插件

    TestNG 的创造者是 Cedric Beust,他在 Java 编程领域非常出名,是 EJB 3 专家组的成员,也是其他一些流行的开源项目(例如 EJBGen 和 Doclipse)的创造者。 示例测试代码: package example1; import org.testng....

    [Asp.net+SQL]仿阿里巴巴B2B电子商务系统_hyb2b

    [Asp.net+SQL]仿阿里巴巴B2B电子商务系统_hyb2b 1.把"Web"文件夹内的文件拷贝到某个文件夹 2.在IIS中新建站点,指向该文件夹,如果新建虚拟路径,会导致一些图片的不正常显示. 3."Database"文件夹内有数据库文件hyb2...

    《.NET最佳实践》.((美)Stephen Ritchie)

    第12章综合介绍多种商业的及开源的测试框架和工具。第四部分(第13章)告诉你如何说服对采用最佳实践存在反感和偏见的组织和个人。本书还附有评估、跟踪最佳实践的记分卡。 《.NET最佳实践》 译者序 前 言 第1...

    使用 C# + .NET Core 开发的开源 DDNS 工具,基于阿里云的 DNS API 接口 .zip

    【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    毕设&课设&项目&实训-动力启航网站管理系统(简称DTcms).zip

    毕设&课设&项目&实训-动力启航网站管理系统(简称DTcms),是目前国内ASP.NET开源界少见的优秀开源管理系统 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、...

    UDP文件传送|开源|linux文件传送工具Legend

    经过测试目前这个版本稳定性比较高,但目前还处在alpha版本,因此也存在不稳定性的风险,因此非常欢迎你下载试用. Legend文件传送软件是基于UDP传送协议的一款软件,它使用自己定义的一套Legend文件传送协议包,来...

Global site tag (gtag.js) - Google Analytics