zoukankan      html  css  js  c++  java
  • TestDriven.NET 2.0——单元测试的好助手(转) dodo

    引言

    在软件开发领域,测试驱动开发(Test Driven DevelopmentTDD)技术在逐渐为广大开发者所接受,它是在添加新代码之前让你的测试代码出错的一种开发技术。在开始编写代码之前首先要写你的测试代码,然后再编写代码让你的测试通过,可以想象,如果没有一个好的单元测试工具,这项工作其实是无法完成的。相信很多.NET开发人员者对于开源的NUnit都不陌生,但是它并不能很好的与Visual Studio.NET IDE集成起来。

    这里我将向大家介绍另一款优秀的单元测试工具——TestDriven.NET 2.0。它是以插件的形式集成在Visual Studio.NET IDE中的单元测试工具,能够兼容各种Visual Studio版本,并且集成了多种单元测试框架诸如NUnitMbUnit,以及Visual Studio Team System适配器等。

    TestDriven.NET的前身是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等,功能更加强大,下面我将一一介绍TestDriven.NET 2.0中涌现出的这些亮点。

    基本使用

    安装完TestDriven.NET 2.0 后,重新启动Visual Studio 2005,可以发现在Visual Studio.NET IDE的右键菜单中会多出一些新项,所有的操作都是直接通过这些右键菜单来完成。我们先来编写一小段简单的测试代码:

    [Test]

    public void TestMethodRun()

    {

        ClassA ca = new ClassA();

        int expected = 2;

        int result = ca.GetResult();

        Assert.AreEqual(expected, result);

    }

    在以前如果您使用NUnit进行单元测试,对于这样一个简单的测试,首先需要运行NUnit GUI,加载当前的程序集,并点击Run按钮运行测试,测试通过后再回到IDE继续编写代码:

    现在有了TestDriven.NET 2.0,就不会有这么麻烦了,我们不用额外运行任何程序,只需要在Visual Studio 2005 IDE中右击并选择Run Test菜单命令就可以运行测试,日常开发中我们都已经习惯了在IDE中进行这种操作,所以这样更加符合我们的开发习惯,也不用频繁在应用程序之间切换窗口。

    TestDriven.NET 2.0 测试的结果将在Output窗口中显示。

    稍微写过一点单元测试代码的朋友都知道,实际开发中的每一个测试,测试方法都不可能只有一个断言(Assert),在以前使用NUnit时,测试如果通不过,我们无法根据错误信息快速准确的定位到代码中的某一个断言,有了TestDriven.NET 2.0,当测试出现错误时,您只需要在Output窗口中双击错误提示,就可以直接定位到出错的断言代码行,极大的提高了排错的效率。

    在上面的测试代码中,我们仅仅是点击了右键菜单Run Test,并没有选择运行哪一个测试方法或者测试类,那么TestDriven.NET 2.0是如何选择并运行测试的呢?其实这跟我们点击鼠标的位置有关,点击鼠标的位置如果在标记为Test的测试方法内,它只会执行该测试方法;点击鼠标的位置如果在方法之外而在标记为TestFixture的类里面,它会执行该类中所有标记为Test的测试方法;点击鼠标的位置如果在类之外,而在某一个命名空间里面,则它会执行该命名空间下所有标记为TestFixture的测试类。

    Ad-Hoc 测试

    在开发中,我们常常会遇到跟踪一些变量的值和某些方法的返回值,一般情况下大家都会选择使用Command Window,这种方式需要通过输入一些命令来查看,未免有些麻烦。TestDriven.NET 2.0为我们提供了一键操作的功能,让我们可以随时随地的跟踪方法的返回值等,而不用输入任何命令。在普通的方法中TestDriven.NET 2.0也可以运行测试(Run Test),不管方法的作用域是public还是private,是实例方法还是static方法。如果测试方法是实例方法,它会使用默认的构造函数创建一个类的对象,在执行测试完成时再释放掉该对象。如果方法有返回值,将会显示在Output窗口中。运行下面的测试:

    会在Output窗口中输出:

    Debug模式测试

    在运行测试的过程中,有时候需要调试跟踪一些信息,如果使用NUnit,由于它没有集成在IDE中,也就无法设置断点。在TestDriven.NET 2.0提供了以Debug模式进行测试,可以在测试代码中设置断点,并进行跟踪,这时我们需要选择Test with | Debugger菜单命令。

    停止测试进程

    在运行测试过程中,有时候会有创建一些应用程序域,但并没有被释放,这样会有部分程序集被加载该应用程序域中并且已经锁定,所以可能会造成编译失败。这时需要释放掉一些测试进程来可以继续编译。在任务栏的右下角,所有的测试进程都会显示在这里,点击右键,选择Stop菜单命令可以结束测试进程。

    集成Reflector

    .NET Reflector是一个.NET平台下的类浏览器和反编译工具,我们可以用它来浏览程序集的类和方法,可以分析由这些类和方法生成的中间语言 (MSIL),相信大家都用过,但它仍然是作为一个独立的工具存在的,在TestDriven.NET 2.0中它被很好的集成在了Visual Studio.NET IDE,通过右键菜单,就可以直接使用.NET Reflector



    集成代码覆盖率分析工具

    在做单元测试的时候,我们总是希望知道自己的代码有多少覆盖到了,哪些代码是没有测试到的,如果没有安装Visual Studio Team System,无法用Team Converage进行代码覆盖率的分析,这时使用大名鼎鼎的NConver是一个不错的选择,并且使用NconverExplorer可以去查看分析结果,所有这些仍然需要运行新的应用程序,TestDriven.NET 2.0把这一切都集成到了IDE中,可以在没有安装Team System的环境下使用Team Converage,也不用单独安装NConver

    重复运行测试

    重复运行测试可以说是TestDriven.NET 2.0的一大亮点。TestDriven.NET2.0出现之前,如果在运行测试的过程中,测试代码不能通过,这时我们会花几秒钟时间去修改测试代码,并再次运行测试,但是往往却发现找不到刚才测试的是哪个代码块,这时您可以使用重复运行测试命令,不管你鼠标点击的位置在哪儿,它都会直接运行上一次的测试。

    可插拔的单元测试框架

    .NET平台下,单元测试框架有很多,TestDriven.NET 2.0不可能把所有的单元测试框架尽收其中,但是它提供了一种很好的可插拔的机制。当你安装一种新的测试框架后,TestDriven.NET 2.0会自动在它的菜单中出现这一项,在测试项目上点右键选择Test With菜单命令,可以选择使用哪一个单元测试框架。

    集成TypeMock.NET

    在做单元测试的过程中,最麻烦的部分就是我们的测试代码必须依赖于系统的其他部分,如数据库等。这时候我们会使用一类替代品来代替这些真实的对象,即使用Mock对象,幸运的是我们不用每次都去实现自己的Mock对象,在.NET平台下,有很多款Mock对象的框架供我们选择。在TestDriven.NET 2.0 出现之前,使用哪个Mock对象的框架,我们需要去下载并安装它们,在TestDriven.NET 2.0 中已经集成了TypeMock.NET框架,这使得我们可以很方便的直接使用而不用再去自行选择。

    结束语

    如果只做单元测试,我会选择Nunit;如果要进行类库反编译,我会选择.NET Relector;如果要分析代码的覆盖率,我会选择NConver;如果要查看代码覆盖率的分析结果,我会选择NConverExplorer,但如果要把以上所有的事情集成在IDE中一起去做,那毫无疑问,我会选择TestDriven.NET 2.0。希望我这篇文章能抛砖引玉,引领大家使用TestDriven.NET 2.0,走上单元测试之路。当然对于TestDriven.NET 2.0它的专业版和开发版已经开始收费,只有个人版仍然可以免费下载使用。

    有关TestDriven.NET 2.0的详细信息请访问:http://www.testdriven.net/

    ——本文发表在《程序员》杂志200612期,有修改

    作者:TerryLee
    出处:http://terrylee.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    posted @ 2007-01-19 23:12 TerryLee 阅读(8904) 评论(33)  编辑 收藏 所属分类: TDD & Reflector


      回复  引用    
    #1楼 2007-01-20 00:03 | 小鬼 [未注册用户]
    可惜的TestDriven.NET 2.0,虽然有了这么多优点,但VS里面的那个玩意好像也都有了这些特点。算了,还是用VS自带的吧。
      回复  引用    
    #2楼 2007-01-20 00:05 | binking [未注册用户]
    前天晚上尝试了下,又有把很多"高级"功能整合进去了,感觉非常不错!
      回复  引用  查看    
    #3楼 [楼主]2007-01-20 00:29 | TerryLee      
    @小鬼
    对于个人用户来说,使用TestDriven.NET的个人版还是个不错的选择,毕竟VSTS是需要花钱去买的
      回复  引用  查看    
    #4楼 [楼主]2007-01-20 00:30 | TerryLee      
    @binking
    :)
      回复  引用  查看    
    #5楼 2007-01-20 09:08 | flyingchen      
    TestDriven.Net对有需要配置的测试有问题
      回复  引用    
    #6楼 2007-01-20 09:19 | 夕雨晨风 [未注册用户]
    好久没有看见你的文章了,中活好空虚!!!继续努力
      回复  引用    
    #7楼 2007-01-20 10:43 | gakaki [未注册用户]
    有个问题哦 ,TESTDRIVEN.NET只能用在WEBAPPLICATION,只能用在VS2005总 VWD EXPRESS不行,
    WEBSITE不能用所以有点麻烦,大家快去装SP1,或者WEB APPLICATION的补丁吧.我怎么装了最新TestDriven.NET-2.0.1948 RTM 没见TYPE MOCK啊


      回复  引用  查看    
    #8楼 [楼主]2007-01-20 12:34 | TerryLee      
    @flyingchen
    这个不太清楚
      回复  引用  查看    
    #9楼 [楼主]2007-01-20 12:36 | TerryLee      
    @夕雨晨风
    最近忙着项目验收的事,一直没有顾上:)
      回复  引用  查看    
    #10楼 [楼主]2007-01-20 12:38 | TerryLee      
    @gakaki
    个人版中没有TYPE MOCK这项功能
      回复  引用  查看    
    #11楼 2007-01-20 13:23 | Bruce Lee      
    个人版中没有TYPE MOCK这项功能,能把您用的版本发一个给我吗?谢谢
    lxg@gdcn.com
      回复  引用  查看    
    #12楼 [楼主]2007-01-20 13:50 | TerryLee      
    @Bruce Lee
    专业版和开发版是收费的,晕~~~~
      回复  引用  查看    
    #13楼 2007-01-20 14:36 | 麒麟.NET      
    能发给我一份个人版吗?在学校国外的网站打死都上不去。。。
    kirinboy@163.com
      回复  引用  查看    
    #14楼 2007-01-20 23:22 | Anders Cui      
    但是NUnit的那个Green Bar给人的感觉很不错 :)
      回复  引用  查看    
    #15楼 [楼主]2007-01-20 23:34 | TerryLee      
    @Anders Cui
    :)
      回复  引用  查看    
    #16楼 2007-01-21 19:59 | hxm      
    可以去 google里 搜索"Nunit Snippet" 下载几个Snippet

    或者把常用Nunit语句拖到左边工具栏

    http://codebetter.com/blogs/scott.bellware/archive/2006/02/28/139446.aspx
    http://www.codeproject.com/dotnet/UnitTestCodeSnips.asp
      回复  引用  查看    
    #17楼 [楼主]2007-01-21 22:32 | TerryLee      
    @hxm
    :)
      回复  引用    
    #18楼 2007-01-22 10:44 | A.Z [未注册用户]
    用了近两年了吧,看着它一点一点地成长,很高兴可以在cnblog看到介绍这个杰出的工具。
      回复  引用  查看    
    #19楼 2007-01-22 10:44 | charleschen      
    收费的,晕死
      回复  引用  查看    
    #20楼 [楼主]2007-01-22 10:52 | TerryLee      
    @charleschen
    个人版可以免费使用,只是少了集成TypeMock的功能
      回复  引用  查看    
    #21楼 [楼主]2007-01-22 10:53 | TerryLee      
    @A.Z
    这次2.0版本的发布确实带了很多的惊喜:)

    //cnblog ——cnblogs,呵呵
      回复  引用  查看    
    #22楼 2007-01-31 21:48 | Bily      
    如果用TestDriven后大家的NnitTest document是怎么写的,还是用Test Code本身作为doc.
    TestCode是覆盖Facade层就可以了吗?
      回复  引用    
    #23楼 2007-02-27 14:09 | Earth [未注册用户]
    :))
      回复  引用    
    #24楼 2007-05-24 14:08 | Ryan [未注册用户]
    请问需要引入单元测试需要引入什么测试空间吗
      回复  引用    
    #25楼 2007-10-02 10:56 | 冯思怡 [未注册用户]
    风格反对
      回复  引用  查看    
    #26楼 2007-10-29 17:06 | 驿路梨花      
    希望TerryLee能贴出一个包含测试代码的工程,小弟对单元测试很不熟悉,看了你的文章后,下了一个TestDriven.NET 2.0装上了,正在学习,但学习资料太少了,都是讲NUnit的,希望TerryLee能从基础上讲讲TestDriven.NET 2.0.
      回复  引用  查看    
    #27楼 2008-01-14 10:53 | jisen      
    下载不了,能给我发一个吗?jisen008@hotmail。com,谢谢!
      回复  引用  查看    
    #28楼 [楼主]2008-01-14 19:23 | TerryLee      
    @jisen
    这玩意儿是收费的
      回复  引用  查看    
    #29楼 2008-03-18 09:21 | VelvetMark      
    用电驴down了一个专业版的装好后还是没发现TYPE MOCK...
    是不是原来装了个人版的原因?
      回复  引用    
    #30楼 2008-04-11 15:06 | bicabo [未注册用户]
    偶找了很久,都没找到下载地址
    去官网 也没看到有下载地址
    能给偶发一个安装包么
    我的邮箱:bicabo@yahoo.cn
      回复  引用    
    #31楼 2008-06-26 15:02 | dataitem [未注册用户]
    给我也发一份``谢谢了
  • 相关阅读:
    js- 类数组对象
    js- caller、 callee
    ES6 声明变量的6种方法
    Vue 之 element-ui upload组件的文件类型
    js中call、apply和bind的区别
    Vue 之 Vue.nextTick()
    DocumentFragment --更快捷操作DOM的途径
    Js 编程题汇总
    &#65279
    网站添加变量后变成空白
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/1298847.html
Copyright © 2011-2022 走看看