您的位置:首页 > 其它

用NUnit为.NET程序做测试 --- 常用测试属性之一 SetUp TearDown TestFixtureSetUp TestFixtureTearDown

2009-04-22 11:34 716 查看
在前面的入门中,每个测试类运行良好。但是大家有没有发现代码的重复性太多了。

每一个测试类中都是先新建一个 Calculate 类的对象,然后 测试每个方法,再然后设置断言。

有没有方法可以设置得简单些呢?有!NUnit 中有一个属性可以完成这个任务。

[SetUp]



被这个属性修饰的方法会在每个测试方法运行前都执行一遍。

[SetUp]
public void init()
{
Console.WriteLine("init");
}

我们运行 NUnit 看看效果吧。在Console.Out栏里打出了四个init





下面我们可以改进一下之前的测试方法的写法了。

namespace NunitTest
{
[TestFixture]
public class CalculateTest
{
private int a;
private int b;

private Calculate cal;

[SetUp]
public void init()
{
a = 10;
b = 2;
cal = new Calculate();
Console.WriteLine("init");
}

[Test]
public void TestAdd()
{
int result = cal.Add(a, b);

Assert.AreEqual(12, result);
}

[Test]
//[ExpectedException(typeof(DivideByZeroException))]
public void TestDivide()
{
int result = cal.Divide(a, b);

Assert.AreEqual(5, result);
}

[Test]
public void TestMinus()
{
int result = cal.Minus(a, b);

Assert.AreEqual(8, result);
}

[Test]
public void TestMultiply()
{
int result = cal.Multiply(a, b);

Assert.AreEqual(20, result);
}
}
}



怎么样简洁多了吧。运行NUnit,测试通过。!!!

一般[SetUp]用来进行一些数据的初始化等操作,他在每个测试方法执行之前执行。

与此对应的还有一个属性,在每个测试方法执行之后执行,用于回收等一些操作,他就是

[TearDown]

我们在测试方法中添加一个试试效果吧:

[TearDown]
public void Destory()
{
Console.WriteLine("Destory !!!");
}

运行NUnit,





上面两个方法属性,分别是在每个测试方法的前后执行,也就是说这个测试类中有多少个测试方法他们就要执行多少次了。

那么在测试中有这么一种情况,如果我们要测试数据库,用上面的两个属性我们可以完成这个测试任务。首先在SetUp中初始化数据库连接,然后在TearDown中释放连接。这样虽然可行,但是如果每个测试方法运行时连接一次数据库,然后释放,然后在连接,在释放。如果次数少还好,如果次数很多,数据库连接又是远程的话,那么这样是很浪费时间的了。

NUnit还为我们提供了下面两个属性:

[TestFixtureSetUp]
public void TestFixtureSetUp()
{
Console.WriteLine("TestFixtureSetUp RUN !!!");
}

[TestFixtureTearDown]
public void TestFixtureTearDown()
{
Console.WriteLine("TestFixtureTearDown RUN !!!");
}



运行,效果如下了:





不用多说了吧,看看效果就知道了。[TestFixtureSetUp] 和 [TestFixtureTearDown] 分别是指在测试类运行前和执行后调用的方法了。这样我们可以很好的解决测试数据库遇到的尴尬境地了……

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: