C#,單元測試入門(以下內容可能來自網絡)
一、什么叫單元測試(unit testing)?
是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函 數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中 要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。
C#中,一個方法,一個類,一個窗口的測試。即單元測試。
二、為什么要進行單元測試。
為了程序的正確性,盡早的發現程序的BUG,便於后期的開發及調試,維護。
三、誰做這一工作?
答案是:程序員自己,因為程序員才明白自己寫的code,才知道要達到的效果。
四、什么時候做?
單元測試越早越好,早到什么程度?極限編程(Extreme Programming,或簡稱XP)講究TDD,即測試驅動開發,先編寫測試代碼,再進行開發。在實際的工作中,可以不必過分強調先什么后什么,重要的是高效和感覺舒適。從經驗來看,先編寫產品函數的框架,然后編寫測試函數,針對產品函數的功能編寫測試用例,然后編寫產品函數的代碼,每寫一個功能點都運行測試,隨時補充測試用例。所謂先編寫產品函數的框架,是指先編寫函數空的實現,有返回值的直接返回一個合適值,編譯通過后再編寫測試代碼,這時,函數名、參數表、返回類型都應該確定下來了,所編寫的測試代碼以后需修改的可能性比較小。
五、C#項目測試DEMO, 本demo用VS2015寫。
1、 新建一個控制台應用。名稱叫:UnitTestDemo
2、 寫一個待測試的方法。
public class Program { static void Main(string[] args) { } public static int Add(int pNum1,int pNum2) { return pNum1 + pNum2; } }
3、 新建一個單元測試項目。名稱叫:UnitTestDemoTest
修改類名,及方法名。UnitTest1重命名為ProgramTest,方法名:TestMethod1改為:AddTest。
這里說明一下,方法面上面的特性:[TestMethod]這是必須的。告訴編譯器這是一個測試法式。
寫代碼。調用要測試的方法。
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using UnitTestDemo; namespace UnitTestDemoTest { [TestClass] public class ProgramTest { [TestMethod] public void AddTest() { int a = 100; int b = 10; Assert.AreEqual(Program.Add(a, b), 110); } [TestMethod] } }
4、 打開“測試資源管理器”,在“測試”->窗口->測試資源管理器
可以看到目前還沒有測試項目。
現在去生成測試項目。
再回來看。是不是多了一個測試
,在上面右擊。選“運行選定測試”,
可以看到前面多了一個通過標記。表示測試通過。

如果未通過。是個紅色的X,我們現在再寫一個未通過的方法。
注意方法的特性一定要加[TestMethod],然后生成應用,再去運行測試。
public void AddTest2() { int a = 100; int b = 10; Assert.AreEqual(Program.Add(a, b), 50); }

5、 回到主項目。看方法提示行。上面有標測測試通過。
在方法上面有一個清楚的提示。
這里說一下VS的強大功能。這個提示很好用。
A、 可以提示方法的引用數量,並快速定位,
B、 還可以提示單元測試的結果。
C、 還可以提示源代碼版本管理器,提交及修改的情況。
6、 以上是手工建立測試項目的。還有一種快捷的方法建立測試項目。在要測試的方法行,右擊。選擇創建單元測試。可彈出建立單元測試對話框。
六、現在說說單元測試里Assert這個類。
(一)、Assert類的使用
1、Assert類所在的命名空間為Microsoft.VisualStudio.TestTools.UnitTesting 在工程文件中只要引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll就可以使用 了。
2、使用Assert類可以對特定功能進行驗證,單元測試方法執行開發代碼中的方法代碼,但只有包含Assert語句時才能報告代碼行為方面的內容。
3、Assert在測試方法中,可以調用任意數量的Assert類方法,如Assert.AreEqual()方法。Assert類有很多方法可供選擇,其中許多方法具有多個重載。
4、使用CollectionAssert類可比較對象集合,也可以驗證一個或多個集合的狀態。
5、使用StringAssert類可以對字符串進行比較。此類包含各種有用的方法。如:StringAssert.Contains、StringAssert.Matches和StringAssert.StartWith。
6、AssertFailedException只要測試失敗,就會引發AssertFailedException異常。如果測試超時,引發意外的異常,或包含生成了Failed結果的Assert語句,則測試失敗。
7、AssertInconclusiveException只要測試生成的結果是Inconclusive,就會引發 AssertInconclusiveException。通常,向仍在處理的測試添加Assert.Inconclusive來指明該測試尚未准備好, 不能運行。
(二)、Assert類主要的靜態成員
