C#,單元測試入門


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類主要的靜態成員

 

1、 AreEqual:方法被重載了N多次,主要功能是判斷兩個值是否相等;如果兩個值不相等,則測試失敗。
2、 AreNotEqual:方法被重載了N多次,主要功能是判斷兩個值是否不相等;如果兩個值相等,則測試失敗。
3、 AreNotSame:引用的對象是否不相同;如果兩個輸入內容引用相同的對象,則測試失敗.
4、 AreSame:引用的對象是否相同;如果兩個輸入內容引用不相同的對象,則測試失敗
5、 Fail:斷言失敗。
 
6、 Inconclusive:表示無法證明為 true 或 false 的測試結果
7、 IsFalse:指定的條件是否為 false;如果該條件為 true,則測試失敗。
8、 IsTrue:指定的條件是否為 true;如果該條件為 false,則測試失敗
9、 IsInstanceofType:測試指定的對象是否為所需類型的實例;如果所需的實例不在該對象的繼承層次結構中,則測試失
 
10、 IsNotInstanceofType: 測試指定的對象是否為所需類型的實例;如果所需的實例在該對象的繼承層次結構中,則測試失敗
11、 IsNull:測試指定的對象是否為非空
12、 IsNotNull:測試指定的對象是否為非空

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM