• 利用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);
       }

      }

     }


  • 相关阅读:
    SQL Server高可用性(High Availability)——Database Replication
    sql server中意向锁的作用
    面试题36:数组中的逆序对
    SQL Server高可用性(High Availability)——Log Shipping
    SQL Server Join方式
    Enabling the Dedicated Administrator Connection (DAC) in SQL Server Express
    执行计划重编译的时机
    SQL Server高可用性(High Availability)——Failover Clustering
    面试题34:丑数
    sql server 性能分析工具
  • 原文地址:https://www.cnblogs.com/lutzmark/p/978070.html
Copyright © 2020-2023  润新知