利用NUnit对类、方法进行原子级测试

经常在网上看到大家都有提到过NUNIT这个单元测试工具.觉得这个工具功能很强.但苦于介绍这方面入门的资料太少,只是把它里面的一个列子贴出来,刚开始用的时候摸不着头脑.我在这里把我的学习过程共享一下,希望对想学习这方面知识的同仁有所帮助.
先是找到这个软件安装,这个大家都会哦,去Google上找就可以了.
打开VS开发环境.
新建一个类.这里我还以大家通常讲到的售火车票为例:
把 NUnit.Framework文件引用进来.
 

using System;
 
using NUnit.Framework;
 

 
namespace NunitTest
 
{
  
/// <summary>
  
/// Ticket 的摘要描述。
  
/// </summary>

  public class Ticket
  
{
   
private int _amount;

   
public Ticket()
   
{
    
//
    
// TODO: 在此加入建構函式的程式碼
    
//
   }


   
public int Amount
   
{
    
get {return _amount;}   
   }


   
public void sell()
   
{
    
if (_amount-1 < 0)
     
throw new Exception("NO");
    _amount 
-=1;
   }

  
   
public void add(int num)
   
{
    _amount 
+=num; 

   }

  }

}


上面是一个有关售火车票的类.
有两个方法,一个是ADD.一个是SELL.这两个方法的作用分别是ADD为加入火车票.SELL为出售火车票.
在调用ADD的时候我们要让它的数量增加.在出售的时候要让火车票减少.
在这里我们的逻辑就体现出来了.
但是现在我们要知道它是不是每作一次操作真的是正确呢,如果不是测试类的话我们就要新建一个实例去验证它,这无形中就增加了我们的工作量.
于是我们想到用NUNIT这个单元测试工具来测试它是否正确.
现在我们来写一个测试类来验证:

[TestFixture]
  
public class TicketTest
  
{
   
public TicketTest()
   
{
    
   }


   
private Ticket t;

   [TestFixtureSetUp]

   
public void initt()
   
{
    t 
= new Ticket();
    t.add(
3);
   }


   [Test]
   
public void add()
   
{
    Assert.AreEqual(
3,t.Amount);
   }


   [Ignore(
"Ignore this void")]
   
public void sell()
   
{
    t.sell();
    Assert.AreEqual(
0,t.Amount);
   }

        
   [Test]
   [ExpectedException(
typeof(Exception))]
   
public void ExcpetionTesting()
   
{
    t.sell();
    t.sell();
    t.sell();
    t.sell();
    Assert.AreEqual(
0,t.Amount);
   }

  }


编译后就可以进行测试了,
打开NUNIT界面File菜单打开刚刚编译的那个DLL文件.按下RUN就可以看到如下结果了.

绿色就表是能过了,如果是红色就表示这个类写得有问题.大家可以改动一些东东然后测试看是否正确.
欢迎大家扔砖头,希望对那些想开始用这个东东的兄弟有所帮助
[TestFixture]
这个属性表是这个类是一个测试类.也就是说如果我们要测试某一个类的话,就在这个类的上面加这个属性.这个属性是要引用了NUnit.Framework才有的.
[Test]
表示这个方法是一个测试方法.
[Ignore("Ignore this void")]
表示忽略这个方法,不对它进行测试
 [TestFixtureSetUp]
表示在开始测试这个类的时候就运行这个方法.也可以说是进行一些类的初始化工作
 [TestFixtureTearDown]
表示在测试结束的时候运行这个方法.可以做一些资源释放的操作.
[SetUp]
表示在每个测试方法开始之前都运行这个方法
[TearDown]
表示在每个测试方法结束的时候都运行这个方法.
[Test]
   [ExpectedException(typeof(Exception))]
这两个属性一起使用就是测试是否有正常的异常触发.
以上讲的是几个NUNIT的几个属性.这些都是放在要测试或是要运行的方法之前的.
用得较多的方法就是Assert.AreEqual这是用来比较两个对象或值是否相等.
还有一些其它的方法,在这里先讲这几个东东,
欢迎大家一起讨论
下面是这个测试类的全部源码
 

using System;
 
using NUnit.Framework;
 

 
namespace NunitTest
 
{
  
/// <summary>
  
/// Ticket 的摘要描述。
  
/// </summary>

  public class Ticket
  
{
   
private int _amount;

   
public Ticket()
   
{
    
//
    
// TODO: 在此加入建構函式的程式碼
    
//
   }


   
public int Amount
   
{
    
get {return _amount;}   
   }


   
public void sell()
   
{
    
if (_amount-1 < 0)
     
throw new Exception("NO");
    _amount 
-=1;
   }

  
   
public void add(int num)
   
{
    _amount 
+=num; 

   }

  }

  
  [TestFixture]
  
public class TicketTest
  
{
   
public TicketTest()
   
{
    
   }


   
public Ticket t;

   [TestFixtureSetUp]

   
public void initt()
   
{
    t 
= new Ticket();
    t.add(
3);
   }


   [Test]
   
public void add()
   
{
    Assert.AreEqual(
3,t.Amount);
   }


   [Ignore(
"Ignore this void")]
   
public void sell()
   
{
    t.sell();
    Assert.AreEqual(
0,t.Amount);
   }

        
   [Test]
   [ExpectedException(
typeof(Exception))]
   
public void ExcpetionTesting()
   
{
    t.sell();
    t.sell();
    t.sell();
    t.sell();
    Assert.AreEqual(
0,t.Amount);
   }

  }

 }


原文地址:https://www.cnblogs.com/lutzmark/p/978070.html