單元測試)

來源:互聯網
上載者:User

1.5.4 單元測試

在現代軟體開發過程中,測試不再作為一個獨立的生命週期。單元測試成為與編寫代碼同步進行的開發活動。單元測試能夠提高程式員對程式的信心,保證程式的品質,加快軟體開發速度,使程式易於維護。

1.單元測試概述

單元測試是在軟體開發過程中要進行的最低層級的測試活動。在單元測試活動中,軟體的獨立單元將在與程式的其他部分相隔離的情況下進行測試。

在一種傳統的結構化程式設計語言中,如C語言,要進行測試的單元一般是函數或子過程。在像C++這樣的物件導向的語言中,要進行測試的基本單元是類。單元測試不僅僅是作為無錯編碼一種輔助手段在一次性的開發過程中使用,單元測試必須是可重複的,無論是在軟體修改,或是移植到新的運行環境的過程中。因此,所有的測試都必須在整個軟體系統的生命週期中進行維護。

經常與單元測試聯絡起來的另外一些開發活動包括代碼走讀(Code Review),靜態分析(Static Analysis)和動態分析(Dynamic Analysis)。靜態分析就是對軟體的原始碼進行研讀,尋找錯誤或收集一些度量資料,並不需要對代碼進行編譯和執行。動態分析就是通過觀察軟體運行時的動作,來提供執行跟蹤、時間分析,以及測試覆蓋度方面的資訊。

2.單元測試的優點

þ        一種驗證行為

程式中的每一項功能都是通過測試來驗證它的正確性。它為以後的開發提供支援。就算是開發後期,我們也可以輕鬆地增加功能或更改程式結構,而不用擔心這個過程中會破壞重要的東西,而且它為代碼的重構提供了保障。這樣,我們就可以更自由地對程式進行改進。

þ        一種設計行為

編寫單元測試將使我們從調用者的角度觀察、思考。特別是先寫測試(test-first),迫使我們把程式設計成易於調用和可測試的,即迫使我們解除軟體中的耦合。

þ        一種編寫文檔的行為

單元測試是一種無價的文檔,它是展示函數或類如何使用的最佳文檔。這份文檔是可編譯、可啟動並執行,並且它保持最新,永遠與代碼同步。

þ        具有迴歸性

自動化的單元測試避免了代碼出現迴歸,編寫完成之後,可以隨時隨地地快速運行測試。

3.越到項目後期,單元測試為何越難進行

在很多項目的初期,項目中的大部分程式員都能夠自覺地去編寫單元測試。隨著項目的進展、任務的加重,離交付時間越來越近,不能按時完成項目的風險越來越大,單元測試就往往成為犧牲品了。專案經理因為進度的壓力也不重視了,程式員也因為編碼的壓力和無人看管而不再為代碼編寫單元測試了。筆者親身經曆的項目都或多或少地發生過類似這樣的事情。越是在項目的後期,能堅持編寫單元測試的程式在整個項目組中所佔的項目比例越低。

為了追趕項目進度,多數程式員將沒有經過任何測試的程式碼上傳到版本控制系統,專案經理也不再追問,照單全收。這樣做的結果就是在項目後期,技術骨幹人員只好加班加點進行系統整合。整合完了之後,下發給測試人員測試時,Bug的報告數量翻倍增長。程式員開始修改Bug,但還有非常多的Bug隱藏得很深,一直潛伏到生產環境去。

總之,在現代軟體開發過程中,測試不再作為一個獨立的生命週期,單元測試成為與編寫代碼同步進行的開發活動。單元測試能夠提高程式員對程式的信心,保證程式的品質,加快軟體開發速度,使程式易於維護。沒有單元測試是絕對不行的。

4.NUnit單元測試工具的介紹與使用

(1)NUnit使用前介紹

NUnit是一個單元測試架構,專門針對測試.NET開發的程式,同類產品還包括JUnit(Java)、CPPUnit(C++),都屬於xUnit中的成員。NUnit是xUnit家族中的第4個主打產品,完全由C#語言來編寫,目前NUnit的最新版本是NUnit 2.4.3,可以到http://www.nunit.org/網站下載。

下面正式講解Nunit。在講解之前先來看一下單元測試的運行效果,1.28和圖1.29所示。

圖1.28  單元測試通過效果

圖1.29  單元測試失敗效果

在圖1.28和圖1.29中非常容易發現不同顏色的狀態條,圖1.28中是綠色的,圖1.29中是紅色的。如果所有測試案例運行成功,就為綠色;反之,如果有一個不成功,則為紅色。

在右邊面板的中間,可以看到測試進度條。進度條的顏色反映了測試執行的狀態:

þ        綠色:描述目前所執行的測試都通過。

þ        黃色:意味某些測試忽略,但是這裡沒有失敗。

þ        紅色:表示有失敗。

(2)使用NUnit進行單元測試

下面開始按步驟講解如何在.NET中使用NUint工具。

①為單元測試代碼建立一個Visual Studio 2005類庫項目,將其命名為NUNIT,1.30所示。

圖1.30  建立類庫

②增加一個NUnit架構引用。在建立NUNIT項目中需要增加一個NUnit.framework.dll引用。首先在功能表列選擇“項目”/“添加引用”命令,彈出“添加引用”對話方塊,1.31所示。然後在安裝的NUnit 2.4.3單元測試工具的目錄下(安裝所在盤:\Program Files\NUnit 2.4.3\bin)找到nunit.framework.dll檔案,單擊“確定”按鈕,即可引用到項目中。

③在建立的類庫中,首先引用命名空間NUnit.Framework,然後建立netTest類,並實現TestA方法和TestB方法。其中,TestFixture屬性和Test屬性,均屬於NUnit.Framework的元素,分別用於指定要測試的類和測試的方法。

圖1.31  添加nunit.framework.dll引用

完整代碼如下:

using System;

using System.Collections.Generic;

using System.Text;

using NUnit.Framework;

namespace NUNIT

{

    [TestFixture]

    public class netTest

    {

        [Test]

        public void TestA()

        {

            int d, i;

            for (i = 0; i < 10; i++)

            {

                d = i;

            }

            Assert.AreEqual(10, i);           //判斷的預期值是否為10

        }

        [Test]

        public void TestB()

        {

            int d, i;

            for (i = 0; i < 10; i++)

            {

                d = i;

            }

            Assert.AreEqual(11, i);           //判斷的預期值是否為11

        }

    }

}

④運行程式,將項目編譯成DLL類庫。

⑤運行NUnit GUI單元測試工具,開啟編譯的DLL檔案,按F5鍵,根據進度條中的顏色,即可判斷單元測試的成功與失敗,1.32所示,TestA方法測試成功,TestB方法測試失敗。

圖1.32  單元測試結果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.