首页  ·  知识 ·  编程语言
NUnit使用方法
ztf704  http://hi.baidu.com/ztf704/blog/  .NET  编辑:dezai  图片来源:网络
NUnit的官方网站下载地址为:www.nunit.org,如果是结合.net使用,最好下载win.net版。我一开始下载的是win版

NUnit的官方网站下载地址为:www.nunit.org,如果是结合.net使用,最好下载win.net版。我一开始下载的是win版本的,结果无论我怎么加载.net的dll或是exe文件都不对,而且花费了大量的时间查找资料,修改NUnit的配置文件,结果还是不行。幸好后来突然发现是NUnit的版本问题。

在vs2005中新建一个class library工程,add 一个class,定义一个取数组最大值的函数,具体定义如下:

public class Class1
{
  public int FindMax(int[] arr)
  {
    int i;
    int max=arr[0];
    for(i =1; i    {
      if(arr[i]>max)
      {
        max =arr[i];
      }
    }
    return max;
  }
}

  第二步:就该编写test code了。add 一个新的class,命名为Class1Test。再编写code之前,需要给该工程添加一个NUnit的引用,具体为:右键点击reference->add reference->选择nunit.framework,然后在Class1Test文件中添加一个引用:using NUnit.Framework。当然,添加引用的前提是已经安装了NUnit了。下面我们就可以开始code test了。

  [TestFixture]
  public class Class1Test
  {
    [Test]
    public void FindMaxTest()
    {
      int[] arr1 ={ 1, 3, 10, 4 };
      int[] arr2 ={ 3, 10, 4, 1 };
      int[] arr3 ={ 1, 10, 4, 3 };
      int[] arr4 ={ -1, -3, -5 };    

      Class1 myclass =new Class1();
      Assert.AreEqual(10, myclass.FindMax(arr1));
      Assert.AreEqual(10, myclass.FindMax(arr2));
      Assert.AreEqual(10, myclass.FindMax(arr3));
      Assert.AreEqual(-1, myclass.FindMax(arr4));
    }
  }

我们先来解析一下这个类吧:[TestFixture]是NUnit的一个重要的属性,可以说是NUnit的一个标记吧,它向编译工具“宣布”:我要测试啦。[Test]一般用在一个函数之前,而且这个函数必须是public类型,而且无返回值,即void。

好了,我们的类与测试类都已经写完了(也可以把测试函数与源代码写在一个文件中,但我相信没有几个人会喜欢那样的方式的)。编译好之后,可以得到一个dll文件。

打开NUnit,点击file->open,选择刚刚编译的dll文件,这样就把文件加载到NUnit了,在它的界面的左边,我们可以看到刚才编写的测试函数FindMaxTest,选择工程项目,或是文件,或是测试函数,然后点击界面右边的Run,如果一路绿灯,OK,我们的测试通过拉!    


NUnit属性  

TestFixture 属性

  本属性标记一个类包含测试。做为一个测试的类,这个类还有一些限制:
  1、必须是Public,否则NUnit看不到它的存在。
  2、它必须有一个缺省的构造函数,否则是NUnit不会构造它。
  3、构造函数应该没有任何副作用,因为NUnit在运行时经常会构造这个类多次。

Test 属性

  Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的。
  1、测试方法必须为Public。
  2、测试方法必须没有参数。
  3、测试方法不返回任何参数。

SetUp/TearDown 属性

  用于在测试开始时初始化,和测试后清除。标记为SetUp/TearDown 属性方法必须为public。

ExpectedException属性

  这里是一个验证这个假设的测试。在这个属性里,你可以在执行过程中捕获你期望的异常类型。如果这个方法在没有抛出期望异常的情况下完成了,这个测试失败。使用这个属性帮助我们写程序员测试验证边界条件(Boundary Conditions)。

Ignore 属性

  由于种种原因,有一些测试我们不想运行。当然,这些原因可能包括你认为这个测试还没有完成,这个测试正在重构之中,这个测试的需求不是太明确。但你有不想破坏测试,不然进度条可是红色的哟。怎么办?使用Ignore属性。你可以保持测试,但又不运行它们。

TestFixtureSetUp / TestFixtureTearDown属性

  有时,一组测试需要的资源太昂贵。例如,数据库连接可能是一个关键资源,在一个test fixture的每个测试中,打开/关闭数据库连接可能非常慢。这就是我在开始提到的问题。
  如何解决?NUnit有一对类似于前面讨论的SetUp/TearDown的属性: TestFixtureSetUp/TestFixtureTearDown。正如他们名字表明的一样,这些属性用来标记为整个test fixture初始化/释放资源方法一次的方法。
  例如,如果你想为所有test fixture的测试共享相同的数据库连接对象,我们可以写一个打开数据库连接的方法,标记为TestFixtureSetUp属性,编写另外一个关闭数据库连接的方法,标记为TestFixtureTearDown属性。

Explicit属性

  本属性忽略一个test和test fixture,直到它们显式的选择执行。如果test和test fixture在执行的过程中被发现,就忽略他们。所以,这样一来进度条显示为黄色,因为有test或test fixture忽略了。

Category属性

  对于测试来说,你有的时候需要将之分类,此属性正好就是用来解决这个问题的。

测试生命周期

  FixtureSetUp
    SetUp
    Test Method1
  TearDown
    SetUp
    Test Method2
  TearDown
    FixtureTearDown

Assert Class

提供了一系列的 static methods,让你可以用来验证主要程序的结果与预期的是否一样。

常用的 Assert 断言有:

1、Assert.AreEqual(object expected,object actual[string message]):验证两个对象是否相等,如Assert.AreEqual(2,1+1);

2、Assert.AreSame(object expected,object actual[string message]):验证两个引用是否指向同一对象,如

  object expected=new object();
  object actual =expected;
  Assert.AreSame(expected,actual);

3、Assert.IsFalse(bool):验证bool值是否为false,如Assert.IsFalse(false);

4、Assert.IsTrue(bool):验证bool值是否为true,如Assert.IsTrue(true);

5、Assert.IsNotNull(object):验证对象是否不为null,如Assert.IsNotNull(new object());

6、Assert.IsNull(object):验证对象是否为null,如Assert.IsNull(null);

本文作者:ztf704 来源:http://hi.baidu.com/ztf704/blog/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读