NUnit 进行单元 测试

  按照极限编程(XP)的理论,写测试就是对软件进行设计的过程,它的重要性甚至超过了实际完成功能的代码。先将测试写完,然后再来完成代码,这样,所有的测试通过之日也就是程序完成之时。  
  首先,我们将NUnit提供的要nunit.framework.dll文件引入到工程中,并创建一个名为TicketTest的类:  
  [TestFixture]  
  public   class   TicketTest  
  {  
  [Test]  
  public   void   Add()  
  {  
  Ticket   ticket   =   new   Ticket();  
  ticket.Add(100);  
  Assertion.AssertEquals(100,   ticket.Amount);  
  }  
  }  
   
  注意,其中的[TestFixture]和[Test]两个Attribute为NUnit所规定必须要添加的,这样,测试框架就可以知道哪些类或者方法需要进行测试。  
  我们在Add方法中定义了一个ticket对象,并给他加了100张票,然后就可以使用:  
  Assertion.AssertEquals(100,   ticket.Amount);  
  来测试ticket的Amount属性是否确实为100。  
  接下来,我们再向TicketTest中添加一个测试Sell的方法:  
  [Test]  
  public   void   Sell()  
  {  
  Ticket   ticket   =   new   Ticket();  
  ticket.Add(100);  
  ticket.Sell();  
  ticket.Sell();  
  ticket.Sell();  
  Assertion.AssertEquals(97,   ticket.Amount);  
  }  
   
  这里,我们先加了100张票之后就一口气卖掉了3张,然后看看我们是否还剩下97张票。  
  好了,这两个方法的测试已经做完了,我们来看一下测试的结果,根据要求,我们写了如下代码:  
  public   class   Ticket  
  {  
  private   int   amount;  
  public   int   Amount  
  {  
  get  
  {  
  return   amount;  
  }  
  }  
   
  public   void   Add(int   num)  
  {  
  }  
   
  public   void   Sell()  
  {  
  }  
  }  
   
  注意这段代码只是为了完成类的结构,方法的实现暂时先空着。然后将这段代码编译成一个dll动态连接库文件:UnitTest.dll。  
  我们运行NUnit的图形测试工具,打开我们编译好的dll文件,点"Run"按纽,就可以看到如下画面:  
   
   
  很醒目红色,表示测试并没有成功,不过这个是在我们的预料之中的。  
  接下来,我们向刚才的Ticket类中完成我们的Add方法实现代码:  
  public   void   Add(int   num)  
  {  
  amount   +=   num;  
  }  
  保存,重新编译。  
  切换到NUnit,再点Run,可以看到:  
   
   
  Add方法已经变成绿色了,再接着将Sell方法也完成:  
  public   void   Sell()  
  {  
  amount   -=   1;  
  }  
  再来测试,结果就变成:  
   
   
  啊,总算变成美丽的绿色了,大家现在体会到环保的重要性了吧。   :)  
  那么可以交任务了吗?等等,别急,还有个异常没测试呢,如果我们的Amount小于0的话,就会产生异常,那么,异常怎么测试呢?请接着看。  
   
  --------------------------------------------------------------------------------  
   
  测试异常:  
  还是跟上面一样,先写出测试代码:  
  [Test]  
  [ExpectedException(typeof(Exception))]  
  public   void   ExcpetionTesting()  
  {  
  Ticket   ticket   =   new   Ticket();  
  ticket.Add(3);  
  ticket.Sell();  
  ticket.Sell();  
  ticket.Sell();  
  ticket.Sell();  
  }  
   
  其中,[ExpectedException(typeof(Exception))]表示我们希望能捕获到发生的异常,如果没有捕获到异常,则表示测试失败。  
  后面的代码很好理解,我们加了三张票,却卖了四张出去,这可不是炒股,以后没办法平仓的。   :)  
  编译运行,我们看到以下的测试画面:  
   
   
  在Ticket类中,我们修改一下Sell方法,让它变成:  
  public   void   Sell()  
  {  
  if(amount   -   1   <   0)  
  throw   new   Exception("Amount不能为0");  
  amount   -=   1;  
  }  
  编译,再测试,结果如下:  
   
   
  好了,到了这里就算完成我们的单元测试之旅了,大家对如何在C#中进行单元测试一定已经有了一个基本的认识。另外,NUnit并不是只针对C#,事实上,你可以在任何.Net语言中使用NUnit来测试你的单元,方法都一样。  

你可能感兴趣的:(it)