在VS中加入單元測試架構:
右鍵項目“屬性“來到“調試”
啟動操作,選擇“啟動外部程式”選擇NUnit程式
C:\Program Files\NUnit 2.5.9\bin\net-2.0\nunit.exe
這樣就可以在產生的時候,自動啟用NUnit進行調試
Not a Test Assembly
The assembly was not built with any known testing framework
出現上述這種錯誤,確認有沒有載入using NUnit.Framework;
using NUnit.Framework;
namespace NUnitTest
{
[TestFixture]
public class Class1
{
[Test]
public void Add()
{
int a = 1;
int b = 2;
int sum = a + b;
Assert.AreEqual(sum, 3);
}
}
}
標識類的特性為TestFixture,以及方法的特性標識為Test這樣就可以測試了,其中Assert是進行測驗的一個類,裡面有許多的靜態方法。
當然不標識類的特性也可以測試,不標識方法的特性,調試的時候就不出現。
測試的:
如果把上面重複的公用,怎麼做呢,如下:
private int a;
private int b;
[SetUp]
public void InitializeOperands()
{
a = 1;
b = 2;
}
使用SetUp來標識即可。
如果想忽略這個方法
添加[Ignore]特性,這個方法還是會顯示,只是會忽略測試,進度條是黃色的。
其他的一些方法
TestFixtureSetUp開啟資料庫連接,資料共用
TestFixtureTearDown關閉資料庫連接, 資料共用
SetUp或TearDown
[Category("加法")]把一些方法分組。
異常的捕獲
[ExpectedException(typeof(DivideByZeroException))]
public void DivideByZero()
{
int zero = 0;
int result = a / zero;
Assert.Fail("Exception");
}
如果存在異常就通過,所以上面這個通過測試。
如果修改為[ExpectedException(typeof(InvalidOperationException))]
那麼就會報錯,嘗試除以0,這是不允許的。
好了,綜合示範一下
namespace NUnitTest
{
[TestFixture]
public class Class1
{
[TestFixtureSetUp]
public void FixtureSetUp()
{
Console.Out.WriteLine("FixtureSetUp");
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
Console.Out.WriteLine("FixtureTearDown");
}
[SetUp]
public void SetUp()
{
Console.Out.WriteLine("SetUp");
}
[TearDown]
public void TearDown()
{
Console.Out.WriteLine("TearDown");
}
[Test]
public void Test1()
{
Console.Out.WriteLine("Test 1");
}
[Test]
public void Test2()
{
Console.Out.WriteLine("Test 2");
}
}
}
運行結果:
FixtureSetUp
***** NUnitTest.Class1.Test1
SetUp
Test 1
TearDown
***** NUnitTest.Class1.Test2
SetUp
Test 2
TearDown
FixtureTearDown