单元测试详细介绍--NUnit 2.2

2005-6-16
        我们很多人都已经知道了单元测试的作用和好处,而且也想在自己的项目中编写单元测试。我们可以自己写一套单元测试平台,在这个平台之上编写自己的单元测试。但软件业已经为我们提供了一些单元测试框架,其中有很多开源而且完善的产品,向NUnit,JUnit都是不错的单元测试框架。我们今天就说说NUnit2.2为我们都带来了什么。
        单元测试主要是测试我们软件中各个方法是否正确的运行,为了辅助我们测试各个方法是否正确的运行,NUnit提出了断言(assert)的概念,通过断言我们可以判断一个方式是否返回了预期的值,一个方法是否正确抛出了异常等等。NUnit为我们提供了很多常用的断言,同时也允许用户根据自己的需要自定义断言。
        我们先看看NUnit为我们提供的几种断言。
        AreEquals 断言:
       用于判断方法的返回结果是否和预期的一样。AreEquals断言的形式如下:Assert.AreEquals(expected , actual , tolerance [ , string message ]) 。其中第一个参数表示我们期望的值。第二个参数是被测试代码产生的值。第三个参数是规定一个误差范围。最后一个参数表示如果测试失败产生的信息。其中第三个参数和最后一个参数是可选的,NUnit为我们提供了很多比较不同类型的对象的过载版本。
        IsNull 断言:
        用于验证给定的对象是否为空或是否不为空。形式如下:Assert.IsNull ( object [, string message ] ) 和 Assert . IsNotNull ( object [ , string message ] )。
        AreSame 断言:
用于验证给定的对象和被测试的对象是否是同一个对象。形式如下:Assert . AreSame ( expected , actual [, string message ] )。
        IsTrue 断言:
用于验证bool条件是否为真或是否为假,如果不符,则失败。形式如下:Assert . IsTrue ( bool condition [ , string message ] ) 和 Assert . IsFalse ( bool condition [ , string message ] );
上面是NUnit框架中重要的,常用的几个断言。
        下面我们介绍一下NUnit整个框架的架构,看看如何才可以将单元测试运行起来。
        我们需要使用NUnit,要引入NUnit . Framework 类库,只有这样,我们才可以使用NUnit提供给我们的各种断言。然后我们要在单元测试的类前加一个 [ TestFixture ] 标记。在每一个测试方法前加上 [ Test ] 标记。有了这些,我们的单元测试框架就可以根据标记找到单元测试的类和单元测试的方法,并执行单元测试了。我们给一个例子说明一个单元测试类的简单例子:
Using NUnit . Framework ;
[TestFixture ]
public class TestClass
{
       [ Test ]
       Public void testMethod ( )
       {
              //some assert .
       }
}
有一点要注意,NUnit单元测试框架是以测试方法为单元,而不是以断言为断言。一个测试方法可以包含多个断言,在一个测试方法中如果有一个断言测试失败,则其他的断言就不能执行了,也就是说该测试方法没有成功。但如果一个测试方法失败了,并不影响其他的测试方法。
今天先写这么多。待续……
2005-6-17
        NUnit提供了多种运行测试的方式,它可以将几个测试类组合起来一起测试,也可以将测试的方法分类分开测试,等等。
        首先,我们可能想一次运行几个测试类,对于这种情况,NUnit提供了 [ Suite ] 标记。也就是一个TestSuite ,它表示将一组测试类组合起来,一起测试。我们看一下下面的例子:
using NUnit . Framework ;
using NUnit . Core ;
[ TestFixture ]
public class TestSuite
{
       [ Suite ]
       public static TestSuite Suite
       {
              get
              {
                     TestSuite suite = new TestSuite ( “Name of Suite” );
                     suite . Add ( new DatabaseTests ( ) );
                     suite . Add ( new FredsTests ( ) );
                     return  suite ;
              }
       }
}
这个测试类有一个 [ Suite ] 标记,用来返回一个 TestSuite 对象,这个对象通过 Add ( ) 方法将希望一起测试的类添加到了一起。这些类也都是用 [ TestFixture ] 包含起来的测试类。NUnit框架会自动寻找每一个测试类,并测试每一个测试方法。
        上面是将一个个的测试类组合起来一起测试,不用人为的一个个的测试。如果我们希望将一个测试类中的方法分为几组,一组是用于测试文件访问的,一组是用来测试数据库访问的。该怎么办呢?不用着急,NUnit为我们提供了 category 标记。通过这个标记,我们可以将一个测试类中的测试方法分组。分别测试每一组方法。我们可以通过为每一个分组起一个名字来标识。记住啊,一个测试方法可以属于一个或多个 category ,这是根据我们按不同的方式分类决定的。下面我们来看看一个例子:
    
using NUnit.Framework;
using NUnit.Core;
 
[TestFixture]
public class TestCateGory
{
              [Test, Category("testFile")]
              public void test1()
              {
                     //some command
              }
 
              [Test, Category("testDatabase")]
              public void test2()
              {
                     //some command
              }
}
       这时,我们就可以在NUnit GUI方式下,选择“Categories”选项页,根据需要选择测试了。
       先写到这里,还有工作要做

posted on 2005-06-17 09:01  chance_win  阅读(1948)  评论(4编辑  收藏  举报

导航