特性简介
通过上面的一个简单的示例,我们已经知道了如何使用NUnit去做单元测试,在NUnit中提供了大量的Attribute来供我们使用,总结如下:
接下我们对这些特性做一下详细的介绍。
Setup和TearDown
我们再修改一下Calculator类,添加一个Mul的方法,如下代码所示:
{
public int Add(int a, int b)
{
return a + b;
}
public int Mul(int a, int b)
{
return a * b;
}
}
同样要对Mul方法编写单元测试,代码如下所示:
public void TestAdd()
{
Calculator cal = new Calculator();
Assert.IsNotNull(cal);
int expectedResult = 5;
int a = 2;
int b = 3;
int actualResult = cal.Add(a,b);
Assert.AreEqual(expectedResult, actualResult);
}
[Test]
public void TestMul()
{
Calculator cal = new Calculator();
Assert.IsNotNull(cal);
int expectedResult = 6;
int a = 2;
int b = 3;
int actualResult = cal.Mul(a, b);
Assert.AreEqual(expectedResult, actualResult);
}
大家可能已经看出问题来了,这里的TestAdd和TestMul方法中有不少的代码都是重复的,因此我们能够把它们放在一个公用的方法中呢?答案自然是可以的,这时我们就需要用到Setup和TearDown特性。Setup方法用户初始化测试用例数据,而TearDown方法用来测试用例资源回收。如我们可以修改测试类代码如下所示:
public class CalculatorTest
{
private int a;
private int b;
[TestFixtureSetUp]
public void Initialization()
{
a = 2;
b = 3;
}
[Test]
public void TestAdd()
{
Calculator cal = new Calculator();
Assert.IsNotNull(cal);
int expectedResult = 5;
int actualResult = cal.Add(a,b);
Assert.AreEqual(expectedResult, actualResult);
}
[Test]
public void TestMul()
{
Calculator cal = new Calculator();
Assert.IsNotNull(cal);
int expectedResult = 6;
int actualResult = cal.Mul(a, b);
Assert.AreEqual(expectedResult, actualResult);
}
}
同样我们可以在TestFixtureTearDown方法中做一些资源回收的工作。细心的朋友注意到我们上面介绍的特性中除了TestFixtureSetup和TestFixtureTearDown外,还有一组Setup和TearDown方法,这两组方法的使用非常相似,如下代码所示:
public void EachSetup()
{
// ......
}
[TearDown]
public void EachTearDown()
{
// ......
}
[TestFixtureSetUp]
public void OneTimeSetup()
{
// ......
}
[TestFixtureTearDown]
public void OneTimeTearDown()
{
// ......
}