使用TestDriven.Net

来源:互联网 发布:java图片管理系统源码 编辑:程序博客网 时间:2024/06/05 00:55

 1,  要用"TestDriven.Net 2.0"进行单元测试除了安装"TestDriven.Net 2.0"外,你需要添加"nunit.framework"引用, 操作是"解决方案管理器-->引用-->(鼠标右键)添加引用-->.net-->nunit.framework.

2,   添加名字空间
using NUnit.Framework;

    为测试的类添加[TestFixture]特性
    为测试方法添加[Test]特性

3, 示例代码

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;

namespace TestDrivenTest
{
    [TestFixture]
    public class TestClass
    {
        [Test]
        public void TestRun()
        {
            Form1 frm1 = new Form1();
            int expected = 0;
            int result = frm1.GetResult(2);
            Assert.AreEqual(expected, result);
        }
    }
}

转:http://blog.csdn.net/sunjiakai/archive/2009/07/27/4384373.aspx
引言
在软件开发领域,测试驱动开发(Test Driven Development,TDD)技术在逐渐为广大开发者所接受,它是在添加新代码之前让你的测试代码出错的一种开发技术。在开始编写代码之前首先要写你的测试代码,然后再编写代码让你的测试通过,可以想象,如果没有一个好的单元测试工具,这项工作其实是无法完成的。相信很多.NET开发人员者对于开源的NUnit都不陌生,但是它并不能很好的与Visual Studio.NET IDE集成起来。
这里我将向大家介绍另一款优秀的单元测试工具——TestDriven.NET 2.0。它是以插件的形式集成在Visual Studio.NET IDE中的单元测试工具,能够兼容各种Visual Studio版本,并且集成了多种单元测试框架诸如NUnit,MbUnit,以及Visual Studio Team System适配器等。
TestDriven.NET的前身是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等,功能更加强大,下面我将一一介绍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是一个专门针对于.NET的单元测试框架。在这之前有针对Java的JUnit,针对C++的CPPUnit,它们都是属于xUnit家族。 NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等,最重要的一点是它适合于所有.NET语言。
NUnit虽然在使用上非常简单,赢得了一部分用户,甚至于微软在企业库的源码中也提供了使用NUnit测试的版本,但是NUnit让我最不爽的地方是没有提供Visual Studio IDE插件,这样如果做单元测试,会发现自己每天忙于奔波于IDE和NUnit GUI之间,不停的在切换窗口;还有一点NUnit虽然跟JUnit是兄弟,但是它的威望和能力相较Junit就差远了,尤其是扩展能力。

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

学习资源

1.NUnit的官方文档

2.园子里LIVE的NUnit详细使用方法

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

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

 

在以前如果您使用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/
转:http://blog.csdn.net/soldierluo/archive/2009/10/10/4651372.aspx
1.       先到http://www.testdriven.net/download.aspx网站上下载Personal Version(个人版,就这个是免费的),然后安装,默认安装即可。
2.       根据安装路径将nunit.framework.dll拷贝出来到一个单独的文件夹内,就叫DLL吧以方便使用,如果是默认安装的话路径如下:
C:/Program Files/TestDriven.NET 2.0/NUnit/2.5/net-2.0/framework
 
新建一个程序集
可以命名这个程序集为TestDriven_NetSample
 
使用TestDriven.Net的属性进行测试
一、将上面说的DLL文件夹拖动到程序集中,然后引用nunit.framework.dll
二、新建一个类,命名为DomainTest,然后将下面的代码加入到新的类中
//为程序添加引用
using NUnit.Framework;
 
namespace TestDriven_NetSample
{
    [TestFixture]
    public class DomainTest
    {
        private int x = 0;
 
        [SetUp]
        public void Init_X()
        {
            x = 10;
        }
 
        [Test]
        public void Get_X()
        {
            Assert.AreEqual(10, x);
        }
 
        [TearDown]
        public void Drop_X()
        {
            x = -1;
        }
    }
}
三、在private int x = 0;处设置一个断点,然后点中Get_X()函数右键,如下图操作:

 
然后按F11就可以跟踪程序的执行顺序及变量x的值的变化,看看具体情况是如何的
 
TestDriven.Net的常用属性简介
之所以说是TestDriven.Net常用属性的简介,是因为这里并没有介绍全部的TestDriven.Net的属性,而只是介绍了一部分常用的属性,如果需要用到这些属性之外的属性请参考下面的链接:http://www.cnblogs.com/lyj/archive/2008/09/03/1283390.html
 
1)        TestFixture属性
这个属性用来修饰测试类,表示这个类包含了测试方法,它是其它所有测试属性的先决条件,没有它其它的属性无效。
注意:使用这个属性修饰类有一些限制:即其修饰的类必须是public的,而且必须有一个缺省的构造函数。
 
2)        SetUp属性
这个属性用来修饰方法,修饰后这个方法在每个测试方法被调用之前执行。
 
3)        Test属性
这个属性用来修饰方法,表示该方法为测试方法。
注意:测试方法不能带有参数,否则无法对其进行测试
 
4)        TearDown属性
这个属性用来修饰方法,说明这个方法是在每个测试方法被调用完之后执行。
 
断言——您的检察官
Ø         什么是断言:类似于断点,可以让我们检查程序的执行是否和我们的预期一致。
Ø         断言概述:在测试框架中,断言是单元测试的核心,我们在测试中要对程序断言,如果某个断言失败,程序会报告一个错误。如果一个测试包含多个断言,那些紧跟失败断言的那些断言就都不会执行,因此每个测试方法最好只有一个断言。
Ø         举例,将Get_X()函数中的内容替换成如下:
        public void Get_X()
        {
            Assert.AreEqual(10, x);
            Assert.AreNotEqual(1, x);
            //Assert.AreEqual(1, x);
        }
              然后执行,看结果如何;再将被注释掉的语句取消注释,然后执行,看结果如何。这是出现错误时的结果(注意红色的部分):
 
------ Test started: Assembly: DAL.Test.dll ------
 
TestCase 'TestDriven_NetSample.DomainTest.Get_X' failed:
  Expected: 1
  But was:  10
       TestDriven_NetSample.cs(26,0): 在 TestDriven_NetSample.DomainTest.Get_X()
 
 
0 passed, 1 failed, 0 skipped, took 0.80 seconds (NUnit 2.5.1).


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaokuang513204/archive/2009/10/28/4736510.aspx

原创粉丝点击