zoukankan      html  css  js  c++  java
  • NET开源项目介绍及资源推荐:单元测试

    说到单元测试,大家首先会想到NUnit,但对于NUnit来说还存在着一些不足,比如说它不能够与VS.NET IDE集成、扩展能力比较差等,除此之外我们还需要一些自动化的测试工具,本文将简单介绍一下如下几种单元测试工具以及推荐一些学习资源。

    1NUnit

    2TestDriven.Net

    3NUnitForms

    4NUnitAsp

     

    一.NUnit

    提起大名鼎鼎的NUnit,我想没有几个不知道吧?NUnit是一个专门针对于.NET的单元测试框架。在这之前有针对JavaJUnit,针对C++CPPUnit,它们都是属于xUnit家族。 NUnitxUnit家族种的第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插件,这样如果做单元测试,会发现自己每天忙于奔波于IDENUnit GUI之间,不停的在切换窗口;还有一点NUnit虽然跟JUnit是兄弟,但是它的威望和能力相较Junit就差远了,尤其是扩展能力,后面我会介绍到一个NUnitWinForm插件。

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

    学习资源

    1NUnit官方文档

    2.园子里LIVENUnit详细使用方法

    3Aero实践单元测试(3)-Using NUnit

    个人认为,看以上两篇中文资料足以学会NUnit的使用,它的难点在于测试用例的编写上,而不是工具本身的使用。


    二.TestDriven.Net

    TestDriven.Net列在开源项目介绍里面其实有些不太合适,因为它现在已经是一种商业化的工具,只有个人版可以免费下载使用,个人认为在开发中个人版的功能已经足够了,之所以我要把它放在这里介绍,是因为它太优秀了。前面说的NUnit,虽然使用非常简单,但是它不能与我们的.NET开发环境集成起来,而TestDriven.Net就是这样一款以插件的形式集成在Visual Studio中的单元测试工具,它的前身是NUnitAddIn,由Jamie Cansdale大师开发,一开始作者只是想做一个NUnit插件集成到Visual Studio中,经过多次版本更新,NUnitAddIn20049月底更名为TestDriven.NET,并在当年的12月初发布了它的第一个Release版本,即TestDriven.NET 1.0。在今年的10月底,终于迎来了TestDriven.NET 2.0版本的发布,最新的2.0版本集成了.NET ReflectorNConverNConverExplorerTypeMock.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的集成,可以使我们很快的定位到出错的代码行:

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

    学习资源

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

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

    学习资源

    对于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(
    "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框架的,感觉太多了,只好单独放一篇文章来介绍了。

    Feedback

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:05 by Dflying Chen
    这个系列不错啊,呵呵

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:07 by Dflying Chen
    不小心坐了个沙发:)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:08 by apan
    请问,mobile开发的测试软件有什么呢?去年做mobile时,完全是手工写测试用例,有些测试简直把我逼疯了,ppc速度慢,做一个用例用花好些时间。一出问题,重复做,太可怕了。

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:12 by wemissworld[匿名]
    谢谢,正要找一个单元测试工具呢,TerryLee就写了这篇很全面的文章。

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:35 by TerryLee
    @Dflying Chen
    谢谢支持:)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:36 by TerryLee
    @apan
    对mobile开发不了解哦:)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 00:37 by TerryLee
    @wemissworld[匿名]
    呵呵,对大家有所帮助就好啊:)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 01:01 by unicorn[匿名]
    頁面測試,可以關注一下 watiN,他可控制到 dialog/frame/js的alert/confirm 的測試
    http://watin.sourceforge.net/

    單元測試的部份,我們是用 NUnitLite
    http://www.codeplex.com/NUnitLite
    功能少nunit很多-_-,但他可以測試 web site project 裏app_code裏的cs
    符合工作的需求,也可參考看看

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 06:56 by LIVE
    @apan
    对于Mobile的单元测试工具,恐怕很难找,因为netcf对于反射支持有限,而像NUnit这样的工具也用到了反射。最典型的例子就是NDoc,这个对netcf有的时候就爱莫能助了。

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 08:30 by TerryLee
    @unicorn[匿名]
    谢谢推荐

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 08:31 by TerryLee
    @LIVE
    :)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 09:25 by 让风吹--笨牛
    文章不错...
    支持.

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 10:01 by 阿武
    怎么没有介绍一下VS2005自带的单元测试呢?

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 10:26 by RDM
    ReSharper UnitRun
    "is a free add-in for Microsoft Visual Studio 2005 that allows you to automatically run and profile unit tests. This user-friendly tool detects test fixtures of the supported unit testing frameworks and lets you run or profile them right from the code editor or from Visual Studio's Solution Explorer. "
    免费但不是开源的...
    http://www.jetbrains.com/unitrun/

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 10:27 by hj821111
    @TerryLee

    谢谢,正在学习相关知识..

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 10:30 by GASSNAKE
    TestDriven.Net测试的时候好像不需要加[TEST]标记的
    还有就是它和NUnit一样,需要在BIN目录下加上一个config文件(项目名称.dll.config)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 10:34 by apan
    @LIVE
    谢谢您!

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 13:04 by TerryLee
    @让风吹--笨牛
    谢谢……

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 13:04 by TerryLee
    @阿武
    主要是介绍.NET开源项目!

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 13:06 by TerryLee
    @RDM
    谢谢推荐!

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 13:06 by TerryLee
    @hj821111
    :)

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 13:07 by TerryLee
    @GASSNAKE
    TestDriven.Net仍然是需要编写测试代码的,也需要加需要加[TEST]标记!

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 15:12 by henry
    用了一下TestDriven.Net
    感觉不错,还可以输出代码内部输出的debug信息和调试很方便。
    试了一下好象是不需要添加Test标记。

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 16:16 by eee
    VS2007 将支持Mobile 系统的 unit test, 请大家关注。
    另外, VS2005 database professsional 版本已经发布,支持SQL的单元测试 ,请大家试用。

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 18:09 by TerryLee
    @henry
    不添加Test标记是一种Ad-Hoc 测试

    # re: .NET开源项目介绍及资源推荐:单元测试  回复  更多评论   

    2006-12-06 18:10 by TerryLee
    @eee
    :)
  • 相关阅读:
    开发中几个时期该写的
    Java API Docs
    Cogs 1709. [SPOJ705]不同的子串 后缀数组
    Poj 3683-Priest John's Busiest Day 2-sat,拓扑排序
    Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划
    Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
    Bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路 最短路,floyd
    Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
    Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
    Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
  • 原文地址:https://www.cnblogs.com/cxd4321/p/584551.html
Copyright © 2011-2022 走看看