標籤:
1.使用vs內建的單元測試組件。 項目引用Microsoft.VisualStudio.TestTools.UnitTesting。 在測試類別上標記TestClass附加屬性,在需要測試的方法上標記TestMethod附加屬性【測試】-【運行】-【所有測試】,,也可以選擇分析程式碼涵蓋範圍,看當前測試回合覆蓋的代碼比率。說明:1.在方法中使用Assert這個靜態類進行測試,裡面提供了許多供測試使用的靜態方法: 2.測試的方法必須是void的,不帶有傳回型別,:
2.使用NUnit 在http://www.nunit.org/index.php?p=download下載安裝包,安裝之後,在項目中引用安裝目錄中的nunit.framework.dll。然後在類中using NUnit.Framework; 在測試類別上標記TestFixture附加屬性,在需要測試的方法是標記Test附加屬性。測試操作有兩種形式a.測試專案為exe或者dll類庫。編譯產生之後,開啟nunit.exe程式,然後選擇Open Project,然後檔案類型選擇程式集,開啟C#項目編譯產生的exe或者dll檔案: b.開啟項目的屬性頁面,【調試】-【啟動操作】部分,選擇啟動外部程式,然後選擇nunit.exe程式。這樣F5調試的時候,可以直接用nunit開啟,查看單元測試的執行資訊 說明:1.和Microsoft.VisualStudio.TestTools.UnitTesting的使用類似,也是使用Assert這個類中提供的靜態方法進行測試,稍有不同的是這個Assert不是靜態類: 對比Microsoft.VisualStudio.TestTools.UnitTesting的Assert靜態類,可以發現提供的靜態方法大體一致,甚至連形參名稱都相同。2.測試的方法同樣必須是void的。可以驗證:給一個有傳回值的方法標記Test附加屬性。
[Test] public int TestNUnit4() { Assert.Greater(10, 11, "不知道具體結果"); return 1; }
運行之後,,會提示相應的測試方法運行不了,(注意是Invalid,而不是宣告失敗的Failed),原因是方法有一個非空的傳回型別,而nunit期望的是無返回結果的方法。
3.如果想讓某個方法暫時不運行測試(或者說測試的時候忽略),可以給它附加了Ignore屬性。
[Test] [Ignore("the method is not ready yet")]//方法標記Ignore屬性,會在nunit中忽略這個方法的運行,呈現黃色。 public void TestNUnit3() { Assert.AreEqual(10, 11, "it is not equal"); }注意:Ignore屬性可以附加在方法上,也可以附加在類上,這樣整個類中的測試方法都會忽略測試回合。如下所示:
[TestFixture] [Ignore("the class is not ready yet")] public class Test { [Test] public void TestNUnit() { Console.WriteLine("12121"); Assert.AreEqual(1, 2, "it is not equal"); } [Test] public void TestNUnit1() { Assert.AreEqual(1, 1 ,"it is not equal"); } [Test] public void TestNUnit2() { Assert.AreEqual(1, Assert.Counter); } . . . }
4.Errors and Failures中會顯示測試方法在發生錯誤和宣告失敗的情況下的資訊如下代碼:
[Test] public void Method1() { var a = 1; var b = 0; var test = a / b; Assert.Pass("assert pass"); }
5.Text Output中會顯示測試回合中輸出的內容。代碼如下:
[TestFixture] public class Test { [Test] public void TestNUnit() { Console.WriteLine("12121"); Assert.AreEqual(1, 2, "it is not equal"); } //省略其他測試方法... [SetUp] public void SetUp() { Console.WriteLine("SetUp"); } [TearDown] public void TearDown() { Console.WriteLine("TearDown"); } }
運行效果
其中有SetUp、TearDown兩個輸出。附加屬性SetUp的作用是在每個測試回合之前執行,可用作初始化工作;TearDown則是在每個測試回合之後執行,可用作釋放資源。還有兩個附加屬性:TestFixtureSetUp和TestFixtureTearDown同樣提供相同的目的,不過是在test fixture範圍下。 參考:http://confach.cnblogs.com/archive/2005/06/20/177817.aspx
C#單元測試