说到单元测试,大家首先会想到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]
public class TestDatabase
{   
    [Test]
    public void TestWithDebugger()
    {
        ClassA ca = new ClassA();
        int expected = 3;
        int result = ca.GetResult();
        Assert.AreEqual(expected,result);
    }
}
NUnit的使用非常简单,运行后如下图所示:
NUnit虽然在使用上非常简单,赢得了一部分用户,甚至于微软在企业库的源码中也提供了使用NUnit测试的版本,但是NUnit让我最不爽的地方是没有提供Visual Studio IDE插件,这样如果做单元测试,会发现自己每天忙于奔波于IDE和NUnit GUI之间,不停的在切换窗口;还有一点NUnit虽然跟JUnit是兄弟,但是它的威望和能力相较Junit就差远了,尤其是扩展能力,后面我会介绍到一个NUnit的WinForm插件。
官方主页:[url]http://www.nunit.org/[/url]
学习资源
1.NUnit的官方文档
2.园子里LIVE的NUnit详细使用方法
3.Aero的实践单元测试(3)-Using 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]
public class TestDatabase
{   
    [Test]
    public void TestWithDebugger()
    {
        ClassA ca = new ClassA();
        int expected = 3;
        int result = ca.GetResult();
        Assert.AreEqual(expected,result);
    }
}
它所有的操作都是通过IDE中的右键菜单完成,如下图所示:
由于跟IDE的集成,可以使我们很快的定位到出错的代码行:
官方主页:[url]http://www.testdriven.net/[/url]
学习资源
由于TestDriven.Net的使用非常简单,所以目前基本没有什么中文文章介绍,大家可以参考一下官方网站上的QuickStart以及我在06年12月份《程序员》杂志上写的一篇关于TestDriven.Net的文章。
 
三.NunitForms
NUnitForms从命名上看,就知道它跟NUnit有关,没错,它是NUnit的一个WinFrom的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以非常容易的用它为你的Windows Forms类进行自动化测试,它提供了一个Recorder Application,来记录你的操作。我们编写类似于如下代码片断的测试代码:
ButtonTester button = new ButtonTester("buttonName", "formName"); 

ControlTester textBox = new ControlTester("nameOfSomeTextBox");

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

textBox["text"] = "newText";
或者类似于这样的代码进行操作记录:
//records button.Click() 
public void Click(object sender, EventArgs args)
{
    listener.FireEvent(TesterType, sender, "Click");
}

//records: comboBox.Enter("text"); 
public void TextChanged(object sender, System.EventArgs e)
{
    listener.FireEvent(TesterType, sender, "Enter", ((ComboBox)sender).Text);
}

//records: comboBox.Select(3); //text of item 3 
public void SelectedIndexChanged(object sender, System.EventArgs e)
{
    EventAction action = new EventAction("Select", ((ComboBox)sender).SelectedIndex);
    action.Comment = ((ComboBox)sender).Text;
    listener.FireEvent(TesterType, sender, action);
}
对于NUnitForms,它还有一个兄弟工具叫NUnitASP,
官方主页:[url]http://nunitforms.sourceforge.net/[/url]
学习资源
对于NUnitForms,仍然是没有发现有好的中文资源,大家可以参考官方文档。
 
四.NUnitAsp
NUnitAsp可以说是NUnitForms的兄弟,它也是一个NUnit的扩展,用来自动测试ASP.NET页面。虽然NunitAsp可以完成一些ASP.NET页面的自动化测试工作,但是在编写测试用例的时候,如果界面上的元素比较多,编写起来会非常的麻烦,这也是为什么NunitAsp一直处于大紫不红的原因。它可以编写如下代码片断的测试代码:
public void TestLayout()
{
    TextBoxTester name = new TextBoxTester("name", CurrentWebForm);
    TextBoxTester comments = new TextBoxTester("comments", CurrentWebForm);
    ButtonTester save = new ButtonTester("save", CurrentWebForm);
    DataGridTester book = new DataGridTester("book", CurrentWebForm);

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

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

public void TestSave()
{
    TextBoxTester name = new TextBoxTester("name", CurrentWebForm);
    TextBoxTester comments = new TextBoxTester("comments", CurrentWebForm);
    ButtonTester save = new ButtonTester("save", CurrentWebForm);
    DataGridTester book = new DataGridTester("book", CurrentWebForm);

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

    name.Text = "Dr. Seuss";
    comments.Text = "One Guest, Two Guest! Guest Book, Best Book!";
    save.Click();
}
官方主页:[url]http://nunitasp.sourceforge.net/index.html[/url]
学习资源
跟自己的兄弟NUnitForms一样,仍然没有好的中文文档,有兴趣的朋友可以参考‘NUnitAsp的官方文档,相对来说还是比较全的,有很多的教程。
 
总结
对于单元测试工具,就简单的介绍这么多,我个人还是推荐使用TestDriven.Net的个人版,至于后面两个NUnit的扩展,大家可以参考一下,在实际开发中用它们来测试会很麻烦,至少我目前不敢去做这个尝试。还有一个非常值得推荐的单元测试工具Mbunit,有兴趣的朋友可以关注一下,我对它了解并不多。
本来想在文章中再介绍一下开源的Mock框架的,感觉太多了,只好单独放一篇文章来介绍了。
本文转自lihuijun51CTO博客,原文链接: http://blog.51cto.com/terrylee/67595,如需转载请自行联系原作者

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

  1. .NET开源项目介绍及资源推荐:数据持久层

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  2. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  3. java pmd_java代码扫描:pmd开源项目介绍

    java代码扫描:pmd开源项目介绍.能够扫描java代码,并发现潜在的问题与bug. PMD scans Java source code and looks for potential probl ...

  4. 开源项目介绍 | Angel-高性能分布式机器学习平台

    2021腾讯犀牛鸟开源人才培养计划 开源项目介绍 滑至文末报名参与开源人才培养计划 报名提交项目Proposal Angel项目介绍 Angel-高性能分布式机器学习平台,是腾讯研发并开源的面向企业级 ...

  5. 几种P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据. ...

  6. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...

  7. php html小项目,使用PHP把HTML生成PDF文件的几个开源项目介绍

    这篇文章主要介绍了使用PHP把HTML生成PDF文件的几个开源项目介绍,本文罗列了FPDF.DomPDF.TCPDF等项目的特点,需要的朋友可以参考下 利用PHP编码生成PDF文件是一个非常耗时的工作 ...

  8. imageJ二次开发之旅 – imageJ开源项目介绍

    imageJ二次开发之旅 – imageJ开源项目介绍 imageJ起源: imageJ项目最初是由NIH(NationalInstitutes of Health,美国国家卫生研究院)在1997发起 ...

  9. P2P流媒体开源项目介绍

    P2P流媒体开源项目介绍 1. PeerCast 2002年成立,最早的开源P2P流媒体项目.PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据. ...

  10. 【P2P】【转载】P2P流媒体开源项目介绍

    大神的整理 P2P流媒体开源项目介绍 前言: 最近在做一个网站,发现p2p流媒体技术对于解决高流量高带宽问题真的很不错. 据说现在一些视频和直播公司在研究p2p+cdn,证明了p2p永不过时. 先记录 ...

最新文章

  1. 【python教程入门学习】自动抢票之 12306 登录篇
  2. 奖学金申请 | 2019年清华-青岛数据科学研究院​“RONG”奖学金申请通知
  3. SpringCloud学习笔记(1)- Spring Cloud Alibaba
  4. Javascript图像处理——图像形态学
  5. 如何训练自己的编程思路
  6. 蓝桥杯 BASIC-25 基础练习 回形取数
  7. Android开源项目汇总
  8. Part2--排序算法类模板
  9. 使用Axis导入webService报错No support for attachments
  10. 工厂方法和抽象工厂模式
  11. java超级玛丽代码_java版超级玛丽源代码
  12. java数独求交集方法,标准数独解题之旅(用一道数独题讲解最基本的5种解题技巧)(二)...
  13. 世界一流学科排名计算机科学,2021软科世界一流学科排名:计算机科学与工程...
  14. Unity3D - 高动态范围(Hight Dynamic Range - HDR)
  15. C++名称查找与ADL
  16. PowerBI实用技巧:案例五(巧用Switch函数展现指标RGB颜色)
  17. SW2016启动界面闪退、激活工具不出现All done! Enjoy!
  18. 下载卫星影像地图软件哪个好用?
  19. mysql 在linux环境下导出,window下导入报ASCII '\0' appeared in the statement
  20. 苹果应用商店广告评论删除

热门文章

  1. 地图画指定区域_善用GIS 妙绘“环卫”一图画卷
  2. 2021-09-23图嵌入方法
  3. python程序运行原理
  4. 凸优化第六章逼近与拟合 6.2最小范数问题
  5. java中文件和流处理
  6. Mesos和Marathon下容器无法正常部署可能的原因
  7. 深度学习处理概率分布中常用的函数
  8. CamRaptor:针对DVR摄像头的漏洞利用工具
  9. 让面试官赞扬的IO读取方法:大文件进行词频统计(单线程与多线程分别解决)利用Buffer流简单又快捷
  10. 常用集合(ArrayList、Hashset、HashMap)的用法(会一直更新)