NUnit学习笔记之进阶篇

来源:互联网 发布:重庆地税网络发票查询 编辑:程序博客网 时间:2024/04/26 08:24

一、概述
  NUnit是一款优秀的开源回归测试框架,我在《NUnit学习笔记》一文中已对其基本使用方法进行了简单的介绍。但除了TestFixture、Test、SetUp、TearDown、TestFixtureSetUp和TestFixtureTearDown这六个属性,NUnit还提供了ExpectedException、Ignore、Suite、Category、Explicit和Platform等属性用于测试。本文的目的就是对这些属性进行介绍。
  在介绍开始之前,还需要说明一些事情,即本文只提供了C#代码示例,而没有提供VB、J#或Delphi代码示例,而且在示例的编写过程中虽然也使用了Visual Studio.net 2005和Delphi 2006作为编辑器,但文中绝不会涉及项目创建的内容。此外本文的示例都是在NUnit可视化环境下测试的,对于其运行效果,如无必要,本文将仅以文字形式进行说明。
二、ExpectedException
  ExpectedException属性用于测试是否会抛出指定的异常,若抛出则NUnit的状态条为绿色,反之为红色。
  示例代码:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using NUnit.Framework;

    namespace NUnitTest
    {
      [TestFixture]
      public class Test1
      {
        [Test]
        [ExpectedException(typeof(Exception))]
        public void TestExpectedException()
        {
          string s = "";
          if (s != "")
            throw new Exception();
        }
      }
    }
  测试效果:状态条为红色。
  具体说明:由于字符串s在初始化时已赋值为"",因此在判断“s != ""”时条件自然不会成立,这样就不会抛出异常,状态条当然也就不会为绿色了。如果想让状态条显示为绿色,将判断条件改为“s == ""”就可以了。
三、Ignore
  Ignore属性可以供类和方法使用,使用后类或方法在NUnit测试中会被忽略,也就是说,对于暂时不想运行的测试类或测试方法,可以通过Ignore属性将其忽略掉。
  示例代码1:
    [TestFixture]
    [Ignore("class test ignore")]
    public class Test2
    {
      [Test]
      public void TestIgnore()
      {}
    }
  示例代码2:
    [TestFixture]
    public class Test22
    {
      [Test]
      [Ignore("function test ignore")]
      public void TestIgnore()
      {}
    }
  测试效果:两个示例被执行后状态条都会显示为黄色。但如果你在测试时选择的是Test2节点,就会发现示例一执行后,只有Test2节点前的圆点显示为黄色,状态条没有发生任何变化,而示例二则会将Test2和TestIgnore节点前的圆点都变成黄色,状态条也显示成黄色。这是由于前者忽略的是整个类的测试,而后者忽略的只是测试方法。
四、Suite
  根据NUnit文档的说明,Suite属性是用来标记返回类型为NUnit.Core.TestSuite的类属性成员的,该类属性成员所返回的对象会包含一组测试类,也就是说Suite属性其实是用来组织一组测试类的。那么组织这些测试类到TestSuite对象中有何用呢?其实在早期的NUint当中,提供有NUnit.TextUI.TestRunner类,该类有个Run方法,参数就是TestSuite对象,通过该方法可以在代码中调用NUnit环境,从而运行TestSuite对象中的测试类。不过现在NUnit似乎已经不再使用这种方式了,故此对于Suite属性这里不再介绍。
五、Category
  Category属性用于将测试类和测试方法分组,从而使测试类和测试方法可以分组进行测试。
  示例代码1:
    [TestFixture]
    [Category("Class1")]
    public class Test31
    {
      [Test]
      public void Test()
      {}
    }

    [TestFixture]
    [Category("Class1")]
    public class Test32
    {
      [Test]
      public void Test()
      {}
    }

    
[TestFixture]
    [Category("Class2")]
    public class Test33
    {
      [Test]
      public void Test()
      {}
    }

    
[TestFixture]
    [Category("Class2")]
    public class Test34
    {
      [Test]
      public void Test()
      {}
    }
  示例代码2:
    [TestFixture]
    public class Test3
    {
      [Test]
      [Category("m1")]
      public void Test11()
      {}

      
[Test]
      [Category("m1")]
      public void Test12()
      {}

      
[Test]
      [Category("m2")]
      public void Test21()
      {}

      
[Test]
      [Category("m2")]
      public void Test22()
      {}
    }
  测试效果:示例一中编写了四个类,被分为Class1和Class2两个组;示例二中编写了四个方法,被分成了m1和m2两个组。对于这种分组的测试,要想看出效果,在打开NUnit后,需要先在Categories选项卡中作出选择,如下图所示:

 

可以看到,所有的组默认都在上边的Available Categories列表框中,选中的组则通过Add按钮添加到下边的Selected Categories列表框中,NUnit允许选中多个。测试完成后对于不想要的组,还可以通过Remove按钮放回到上边。选好后,点击Run按钮,再选择Tests选项卡,效果如下图:

 

可以看到,只有与Class1编组对应的Test31和Test32这两个类被测试了。
六、Explicit
  Explicit属性与Ignore属性有些类似,也是用于对暂时不想运行的测试类或测试方法做忽略的。但与Ignore属性相比还有两点差别:一个是Explicit属性不需要说明信息,一个是使用Explicit属性做忽略的类或方法在NUnit中被选中后,将不再被忽略,而是进行测试。
  示例代码1:
    [TestFixture]
    public class Test4
    {
      [Test, Explicit]
      public void TestMethod()
      {}
    }
  示例代码2:
    [TestFixture, Explicit]
    public class Test42
    {
      [Test]
      public void TestMethod()
      {}
    }
  测试效果:示例一所忽略的是方法,若不在NUnit中选中该方法,测试后该方法前的圆点为黄色,即在测试中被忽略,若选中了则在测试后显示为绿色或红色,这与测试的结果有关;示例二所忽略的是类,效果与示例一类似。
七、Platform
  Platform属性用来指定运行平台,若测试类或测试方法运行的平台与指定的一致则忽略,否则执行。
  示例代码1:
    [TestFixture]
    public class Test5
    {
      [Test]
      [Platform(Exclude="Win98,Linux")]
      public void PlatformTest1()
      {}

      
[Test]
      [Platform(Exclude="Net-2.0")]
      public void PlatformTest2()
      {}
    }
  示例代码2:
    [TestFixture]
    [Platform(Exclude="Net-2.0")]
    public class Test52
    {
      [Test]
      public void PlatformTest1()
      {}

      
[Test]
      public void PlatformTest2()
      {}
    }
  测试效果:示例一作用的是方法,测试后PlatformTest1前的圆点为绿色,PlatformTest2前的圆点为黄色,即在测试中被忽略,这是因为我的运行平台是.net 2.0;示例二作用的是类,因此两个方法都会被忽略。
  此外,NUnit还给出了平台的参考,摘录如下:
 

Win

Win32 Win32S Win32Windows Win32NT WinCE Win95 Win98 WinMe NT3 NT4 NT5 Win2K WinXP Win2003Server Unix Linux Net Net-1.0  

原创粉丝点击