NUnit学习笔记

一、简介
  NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从
www.nunit.org网站上免费获得,最新版本是2.2.0。在下载时,会看到NUnit 2.2.0版有NUnit-2.2.0.msi、NUnit-2.2.0-mono.zip、NUnit-2.2.0-src.zip等三个文件的下载连接,这三个连接前边有说明,分别是win、mono以及src,这说明前两个文件分别是供.net平台和Mono平台使用的,而最后一个是源码。这里需要的是NUnit-2.2.0.msi,而且该安装包中已含有源码。下载NUnit-2.2.0.msi后,双击该文件,然后按提示进行安装,这样系统中就具备NUnit环境了。
二、配置类库
  开发工具我使用的是微软的Visual Studio.net 2003(以下简称vs03),打开后点击菜单“文件”->“新建”->“项目”,打开“新建项目”对话框:

在该对话框中,“项目类型”我选择的是“Visual Basic项目”,如果您想使用C#或者J#,请自行选择“Visual C#项目”或“Visual J#项目”,反正操作差不多,下边也都会介绍到,不过VC就免谈了;“模板”我选的是“控制台应用程序”,您也可以选其它“模板”,我看的例子创建的就是“类库”;名称和位置请自行设定,VB、C#、J#项目我都建了,分别起名为NUnitVB、NUnitCS和NUnitJS,位置是本机的G:/MDZPCK/Microsoft/MySY。设置好后,点击“确定”按钮,创建该项目。
项目创建后,点击菜单“项目”->“添加引用”,打开“添加引用”对话框:

在“.NET”选项卡中找到组件名称为nunit.framework的一项,双击添加到“选定的组件”中,别的组件不用管,然后点击“确定”按钮,此时在项目中就可以使用NUnit类库了。
三、编写用于测试的类
  用于测试的类很简单,名为Book,只有id和name两个属性,这两个属性将分别用于两个用例当中。
  下面开始编写,请点击菜单“项目”->“添加类”,打开“添加新项”对话框:

在该对话框中,“类”模板被默认选中,请将名称修改为Book.vb或Book.cs、Book.jsl,然后点击“打开”按钮。
  类创建后,需要修改代码,VB代码如下:
  Public Class Book
    
    
Dim pid As String = Nothing
    Dim pname As String = Nothing
    
    
Property id() As String
      Get
        Return pid
      End Get
      Set(ByVal Value As String)
        pid = Value
      End Set
    End Property
    
    
Property name() As String
      Get
        Return pname
      End Get
      Set(ByVal Value As String)
        pname = Value
      End Set
    End Property
  End Class
代码比较简单,没什么可说的吧?下边是C#代码:
  using System;
  
  
namespace NUnitCS
  {
    /// <summary>
    /// Book 的摘要说明。
    /// </summary>
    public class Book
    {
      private string pid = null;
      private string pname = null;
      
      public string id
      {
        get
        {
          return pid;
        }
        
set
        {
          pid = value;
        }
      }
      
      
public string name
      {
        get
        {
          return pname;
        }
        
set
        {
          pname = value;
        }
      }
    }
  }
也没什么可说的吧?下边是J#代码:
  package NUnitJS;
  
  
/**
   * Book 的摘要说明。
   */
  public class Book
  {
    private String pid = null;
    private String pname = null;

    
/** @property */
    public void set_id(String value)
    {
      pid = value;
    }
    /** @property */
    public String get_id()
    {
      return pid;
    }
    
    /** @property */
    public void set_name(String value)
    {
      pname = value;
    }
    /** @property */
    public String get_name()
    {
      return pname;
    }
  }
可以看到,J#代码与VB和C#代码有些不同,因为J#的语法是从Java演变过来的,所以其属性在定义时被拆成了set_XXX和get_XXX这样的两个方法。但仅有set_XXX和get_XXX这样的两个方法还不够,还需要使用@property指令进行说明。虽然用不用@property指令在调用时也没什么区别,但你可以尝试将变量pid和pname更名为id和name,重新编译;而后再将@property指令去掉,再重新编译。真的不一样。
  至此,用于测试的类编写完成了。
四、编写测试用例
  这里只用了一个类进行测试,名为BookTest,以前这样的类可能需要继承NUnit.Framework.TestCase类,但现在只需要对该类使用TestFixture属性进行标识即可,而无须继承了。BookTest类包含两个用例,分别对应该类的testId和testName方法,即每个方法实现了一个测试用例。注意,在NUnit中,这些用来实现测试用例的方法有两种手段进行标识:一个是以testXXX的格式来命名,一个是使用Test属性进行标识。此外,BookTest还有Init和Dispose这两个方法,并分别使用TestFixtureSetUp和TestFixtureTearDown属性来进行标识,前者在每个测试方法开始之前执行,多用来做初始化;后者在每个测试方法完成之后执行,多用来清理资源。注意,这两个方法的名称并没有什么限制,但必须用TestFixtureSetUp和TestFixtureTearDown属性进行标识。下面开始编写BookTest。
  点击菜单“项目”->“添加类”,打开“添加新项”对话框,将名称改为BookTest.vb或BookTest.cs、BookTest.jsl,然后点击“打开”按钮创建该类。修改代码,VB代码如下:
  Imports NUnit.Framework
  
  
<TestFixture()> _
  Public Class BookTest
    
    
Dim bo As Book = Nothing
    
    
<TestFixtureSetUp()> _
    Public Sub Init()
      Console.WriteLine("测试开始!")
      bo = New Book
      Console.WriteLine("book对象被初始化!")
    End Sub
    
    
<Test()> _
    Public Sub testId()
      bo.id = "001" '设置id属性的值为001
      '使用Assert查看id属性的值是否为001
      Assert.AreEqual("001", bo.id)
      Console.WriteLine("id属性被测试!")
    End Sub
    
    
<Test()> _
    Public Sub testName()
      bo.name = "ASP" '设置name属性的值为ASP
      '使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试
      Assert.AreEqual("JSP", bo.name)
      Console.WriteLine("name属性被测试!")
    End Sub
    
    
<TestFixtureTearDown()> _
    Public Sub Dispose()
      Console.WriteLine("book对象将被清理!")
      bo = Nothing
      Console.WriteLine("测试结束!")
    End Sub
  End Class
这里Init和Dispose方法没什么好说的,就是执行了对book对象的初始化和清理,不过testId和testName需要说明一下。前者是在对bo的id属性进行测试,首先赋值为”001”,然后使用Assert的AreEqual方法查看id属性中存放的值是否是期待的值,由于我的期待值也是”001”,所以执行后这个用例应该是成功的;后者则是对bo的name属性进行测试,也是首先赋值为”ASP”,然后使用Assert的AreEqual方法查看其值是否是期待的,由于我特意将期待值设定为根本不可能的”JSP”,因此这个用例执行后会出现一个错误。但请注意,由于我是特意要让测试出现错误,所以将期待值设定成了不可能的值,如果你是测试人员,请千万不要这么做,否则如果别的地方导致了错误,很容易给自己造成不必要的麻烦。
  下面简单介绍一下上边用到的静态类NUnit.Framework.Assert。该类主要包含6个方法:
  1.AreEqual()方法,用来查看对象中存的值是否是期待的值,与字符串比较中使用的Equals()方法类似;
  2.IsFalse()和IsTrue()方法,用来查看变量是是否为false或true,如果IsFalse()查看的变量的值是false则测试成功,如果是true则失败,IsTrue()与之相反。
  3.AreSame()方法,用来比较两个对象的引用是否相等,类似于通过“Is”或“==”比较两个对象;
  4.IsNull()和IsNotNull()方法,用来查看对象是否为空和不为空。
下面再看一下C#代码:
  using System;
  using NUnit.Framework;
  
  
namespace NUnitCS
  {
    /// <summary>
    /// BookTest 的摘要说明。
    /// </summary>
    [TestFixture]
    public class BookTest
    {
      Book book = null;

      
[TestFixtureSetUp]
      public void Init()
      {
        Console.WriteLine("测试开始!");
        book = new Book();
        Console.WriteLine("book对象被初始化!");
      }
      
      [Test]
      public void testId()
      {
        book.id = "001"; //设置id属性的值为001
        //使用Assert查看id属性的值是否为001
        Assert.AreEqual("001", book.id);
        Console.WriteLine("id属性被测试!");
      }
      
      
[Test]
      public void testName()
      {
        book.name = "ASP"; //设置name属性的值为ASP
        //使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试
        Assert.AreEqual("JSP", book.name);
        Console.WriteLine("name属性被测试!");
      }
      
      
[TestFixtureTearDown]
      public void Dispose()
      {
        Console.WriteLine("book对象将被清理!");
        book = null;
        Console.WriteLine("测试结束!");
      }
    }
  }
没什么好说的吧?下面看J#代码:
  package NUnitJS;
  
  
import System.*;
  import NUnit.Framework.*;
  
  
/**
   * BookTest 的摘要说明。
   */
  /** @attribute TestFixture() */
  public class BookTest
  {
    Book book = null;
    
    
/** @attribute TestFixtureSetUp() */
    public void Init()
    {
      Console.WriteLine("测试开始!");
      book = new Book();
      Console.WriteLine("book对象被初始化!");
    }
    
    
/** @attribute Test() */
    public void testId()
    {
      book.set_id("001"); //设置id属性的值为001
      //使用Assert查看id属性的值是否为001
      Assert.AreEqual("001", book.get_id());
      Console.WriteLine("id属性被测试!");
    }
    
    
/** @attribute Test() */
    public void testName()
    {
      book.set_id("ASP"); //设置name属性的值为ASP
      //使用Assert查看name属性的值是否为JSP,这是个必然出现错误的测试
      Assert.AreEqual("JSP", book.get_name());
      Console.WriteLine("name属性被测试!");
    }
    
    
/** @attribute TestFixtureTearDown() */
    public void Dispose()
    {
      Console.WriteLine("book对象将被清理!");
      book = null;
      Console.WriteLine("测试结束!");
    }
  }
改好后,点击菜单“调试”->“启动”或按F5键运行程序。等等,main函数里头好象一句代码也没写过呢吧?没错,一句也没写,不过你照做就可以了。在看到黑屏一闪之后,编码工作完成。
五、运行NUnit
  编码完成后,就可以使用NUnit测试了。NUnit有两种界面,一种是命令行的,一种是可视化的,我使用的就是后者。点击“开始”菜单->“所有程序”->“NUnit 2.2”->“Nunit-Gui”,打开NUnit的可视化界面:

点击菜单“File”->“Open”,打开刚才运行之后生成的可执行文件:

此时就可以使用BookTest类对Book类进行测试了。请首先选择testId,点击“Run”按钮,运行结果如下图:

testId前的灰点变绿,而且进度条显示为绿条,这表明运行成功。下面再选择BookTest,点击“Run”按钮,运行结果如下图:

testId前的点依然是绿色,但testName前的点是红色,而且进度条显示为红条,这表明testName中存在错误。不过这个错误是预计之内的,如果不想看到,可以在vs03中将testName()方法中的”JSP”改成”ASP”,然后重新运行。此时无须重新启动NUnit,NUnit会自动加载重新编写好的文件。此时再运行BookTest,进度条已不是红色,而是绿色了。
六、小结
  其实这里只是对NUnit进行了简单的介绍,NUnit还提供了更多的功能,相关内容可以参考其文档。不过是英文的哦。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=436787

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值