這里也許有人會(huì)問,如果我的項(xiàng)目很大,每個(gè)測試方法都需要連接數(shù)據(jù)庫,在每個(gè)方法執(zhí)行的時(shí)候進(jìn)行連接再釋放,這樣是不是太耗資源太慢了,能不能在一個(gè)單元測試類實(shí)例化的時(shí)候運(yùn)行一個(gè)指定的方法呢?
這是可以的。在NUnit中,我們使用[TestFixtureSetUp]和[TestFixtureTearDown]可以實(shí)現(xiàn)這樣的功能。[TestFixtureSetUp]是指在這個(gè)測試類的整個(gè)生命周期中,它在所有的測試方法之前運(yùn)行一次,而[TestFixtureTearDown]是在所有的測試方法都結(jié)束時(shí)運(yùn)行。
這里要注意的,[TestFixtureSetUp]與構(gòu)造函數(shù)是不一樣的,它標(biāo)識(shí)的方法遲于構(gòu)造函數(shù)運(yùn)行。我們再對(duì)這個(gè)測試類進(jìn)行重構(gòu):
[TestFixture]
public class CalculatorTest
...{
private Calculator cal;
private int a, b, expected, actual;
public CalculatorTest()
...{
Console.WriteLine("執(zhí)行構(gòu)造函數(shù)");
}
[TestFixtureSetUp]
public void InitClass()
...{
Console.WriteLine("執(zhí)行TestFixtureSetUp");
cal = new Calculator();
a = 10;
b = 2;
}
[TestFixtureTearDown]
public void FinalizeClass()
...{
Console.WriteLine("執(zhí)行TestFixtureTearDown");
}
[SetUp]
public void InitMethod()
...{
Console.WriteLine("執(zhí)行SetUp");
}
[TearDown]
public void FinalizeMethod()
...{
Console.WriteLine("執(zhí)行TearDown");
a = 10;
b = 2;
}
[Test]
public void TestAdd()
...{
Console.WriteLine("TestAdd() Begin");
expected = 12;
actual = cal.Add(a, b);
Assert.AreEqual(expected, actual);
Console.WriteLine("TestAdd() End");
}
[Test]
public void TestMinus()
...{
Console.WriteLine("TestMinus() Begin");
expected = 8;
actual = cal.Minus(a, b);
Assert.AreEqual(expected, actual);
Console.WriteLine("TestMinus() End");
}
[Test]
public void TestMultiply()
...{
Console.WriteLine("TestMultiply() Begin");
expected = 20;
actual = cal.Multiply(a, b);
Assert.AreEqual(expected, actual);
Console.WriteLine("TestMultiply() End");
}
[Test]
public void TestDivide()
...{
Console.WriteLine("TestDivide() Begin");
expected = 5;
actual = cal.Divide(a, b);
Assert.AreEqual(expected, actual);
Console.WriteLine("TestDivide() End");
}
}
在NUnit中,我們可以很清楚地看到這個(gè)類的執(zhí)行順序:
假如我們的測試項(xiàng)目中有使用到數(shù)據(jù)庫,可以把數(shù)據(jù)庫連接寫在[TestFixtureSetUp]中,把釋放的代碼寫在[TestFixtureTearDown]中。
我相信現(xiàn)在大家對(duì)NUnit的這4個(gè)屬性都應(yīng)該有一個(gè)直觀的認(rèn)識(shí)了吧。都是4個(gè)很簡單的屬性,但是在使用中用處卻是非常大的。