经常在网上看到大家都有提到过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); } } }

|