收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » .NET ».NET开源项目介绍及资源推荐:单元测试  XML
发表人 内容
netASP
[头像]

交流经验:
总积分:160
级别:普通会员
注册时间: 2011-11-02
文章: 16
离线

说到单元测试,大家首先会想到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语言。

编写一段简单的单元测试代码:

 

csharp代码:
[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插件。

官方主页:http://www.nunit.org/

学习资源

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等,功能更加强大,我们还是使用前面的例子:

 

csharp代码:
[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的集成,可以使我们很快的定位到出错的代码行:

 

官方主页:http://www.testdriven.net/

学习资源

由于TestDriven.Net的使用非常简单,所以目前基本没有什么中文文章介绍,大家可以参考一下官方网站上的QuickStart以及我在06年12月份《程序员》杂志上写的一篇关于TestDriven.Net的文章。

 

三.NunitForms

NUnitForms从命名上看,就知道它跟NUnit有关,没错,它是NUnit的一个WinFrom的扩展。它为Windows Forms应用程序提供单元测试和压力测试,可以非常容易的用它为你的Windows Forms类进行自动化测试,它提供了一个Recorder Application,来记录你的操作。我们编写类似于如下代码片断的测试代码:


java代码:
ButtonTester button = new ButtonTester("buttonName", "formName"); 

ControlTester textBox = new ControlTester("nameOfSomeTextBox");

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

textBox["text"] = "newText";

或者类似于这样的代码进行操作记录:


java代码:
//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,

官方主页:http://nunitforms.sourceforge.net/

学习资源

对于NUnitForms,仍然是没有发现有好的中文资源,大家可以参考官方文档

 

四.NUnitAsp

NUnitAsp可以说是NUnitForms的兄弟,它也是一个NUnit的扩展,用来自动测试ASP.NET页面。虽然NunitAsp可以完成一些ASP.NET页面的自动化测试工作,但是在编写测试用例的时候,如果界面上的元素比较多,编写起来会非常的麻烦,这也是为什么NunitAsp一直处于大紫不红的原因。它可以编写如下代码片断的测试代码:


java代码:
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("http://localhost/GuestBook/GuestBook.aspx");

    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("http://localhost/GuestBook/GuestBook.aspx");

    name.Text = "Dr. Seuss";
    comments.Text = "One Guest, Two Guest! Guest Book, Best Book!";
    save.Click();
}

官方主页:http://nunitasp.sourceforge.net/index.html

学习资源

跟自己的兄弟NUnitForms一样,仍然没有好的中文文档,有兴趣的朋友可以参考‘NUnitAsp的官方文档,相对来说还是比较全的,有很多的教程。

 

总结

对于单元测试工具,就简单的介绍这么多,我个人还是推荐使用TestDriven.Net的个人版,至于后面两个NUnit的扩展,大家可以参考一下,在实际开发中用它们来测试会很麻烦,至少我目前不敢去做这个尝试。还有一个非常值得推荐的单元测试工具Mbunit,有兴趣的朋友可以关注一下,我对它了解并不多。

本来想在文章中再介绍一下开源的Mock框架的,感觉太多了,只好单独放一篇文章来介绍了。

 

转自【TerryLee

这篇文章被编辑了 1 次. 最近一次更新是在 2011-11-02 15:15:45


推广链接
精品视频课程推荐

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

XML基础视频教程
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM

Weblogic实战视频教程
WebLogic基础知识:WebLogic基本概念、正确安装WebLogic、建域、应用部署于JDBC选择、对WebLogic的监控和日志查看、集群的高可用性;课程目标:彻底掌握WebLogic的基本概念,在理解基本概念的基础上做到正确的安装WebLogic,根据不同的需求创建域,合理选择应用部署和JDBC配置。熟练掌握WebLogic的console监控,了解各种性能和运行指标,以及对监控结果的分析,运用集群的高可用性,对集群架设。

单元测试-Junit实战视频教程
JUnit4的基本使用;在maven环境下使用JUnit;用JMock来模拟测试对象要依赖的对象;用cobertura实现覆盖测试;用hundson实现持续集成;JUnit3的基本使用。

yuzebaby
[头像]

交流经验:
总积分:4517
级别:VIP1
注册时间: 2012-07-19
文章: 400
离线

嘻嘻,谢谢啊,挺好的。



个性签名:每天进步一点点
 
交流首页 » .NET
前往:   

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网