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