• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    使用NUnit在.Net編程中進行單元測試

    發布: 2007-5-05 18:59 | 作者: seanhe | 來源: 轉載 | 查看: 63次 | 進入軟件測試論壇討論

    領測軟件測試網

    引言:

    舉一個可能會發生在你身邊的事件將更能貼近實際,幸好我們現在就有一件在程序員看來非常普通的任務:

    你今天第一天上班,你的項目經理拿給你一疊不算厚的文檔,告訴你今天的任務是按照文檔中的要求編寫一個.Net類,可能因為任務并不復雜,所以他看上去非常的隨意。

    今天能否很好的完成任務對你來說非常特殊,你拿過來后快速略過了前面大段的項目介紹,因為你知道那些對你并不重要,印象中好象是一個關于售票系統的工程。很快,你找了你需要關注的重點:類的需求說明文檔。你詳細的看了一遍,感覺并不復雜,類名Ticket,有一個只讀的int型公共的屬性,名稱是Amount,還有兩個方法,一個是名稱是Sell,功能是將Amount減去一,表示賣掉了一張票,當然,票可不能為負數,如果是的話,拋出一個異常說明原因。另一個是Add,它有一個int型的參數,功能是將這個參數的值加到Amount中去,可能是表示進票之類的事情吧,你不太關心,反正這個程序很簡單,你掩飾住內心的狂喜,打開電腦,調出編輯器,開始準備寫程序了。

    "喂,等等",項目經理不知道什么時候又轉回來了,"我想知道你打算怎么進行javascript:;" onClick="javascript:tagshow(event, '%B5%A5%D4%AA%B2%E2%CA%D4');" target="_self">單元測試,我最關心的是這個"。

    "什么是單元測試?"你轉過頭一臉沮喪的看著失望的項目經理。

    什么是單元測試:

    在程序設計過程中會有許多種測試,單元只是其中的一種,單元測試并不能保證程序是完美無缺的,但是在所有的測試中,單元測試是第一個環節,也是最重要的一個環節。單元測試是一種由程序員自行測試的工作。簡單點說,單元測試就是測試代碼撰寫者依據其所設想的方式執行是否產生了預期的結果。關于單元測試的重要性已經有許多文章做了很多深入的分析,這里就不再贅述。

    NUnit是一個為Net準備的自動化單元測試框架,它的作用就是幫助你方便的完成單元測試工作,同鼎鼎有名的JUnit一樣,都是xUnit家族的成員。它的下載地址是:http://www.nunit.org。

    測試先行:

    "什么?先寫測試?"你一定非常驚訝,對!就是先來編寫測試代碼,按照極限編程XP)的理論,寫測試就是對軟件進行設計的過程,它的重要性甚至超過了實際完成功能的代碼。先將測試寫完,然后再來完成代碼,這樣,所有的測試通過之日也就是程序完成之時。

    首先,我們將NUnit提供的要nunit.framework.dll文件引入到工程中,并創建一個名為TicketTest的類:

    [TestFixture]public class TicketTest{[Test]public void Add(){Ticket ticket = new Ticket();ticket.Add(100);Assertion.AssertEquals(100, ticket.Amount);}}

    注意,其中的[TestFixture]和[Test]兩個Attribute為NUnit所規定必須要添加的,這樣,測試框架就可以知道哪些類或者方法需要進行測試。

    我們在Add方法中定義了一個ticket對象,并給他加了100張票,然后就可以使用:

    Assertion.AssertEquals(100, ticket.Amount);

    來測試ticket的Amount屬性是否確實為100。

    接下來,我們再向TicketTest中添加一個測試Sell的方法:

    [Test]public void Sell(){Ticket ticket = new Ticket();ticket.Add(100);ticket.Sell();ticket.Sell();ticket.Sell();Assertion.AssertEquals(97, ticket.Amount);}

    這里,我們先加了100張票之后就一口氣賣掉了3張,然后看看我們是否還剩下97張票。

    好了,這兩個方法的測試已經做完了,我們來看一下測試的結果,根據要求,我們寫了如下代碼:

    public class Ticket{private int amount;public int Amount{get{return amount;}}public void Add(int num){}public void Sell(){}}

    注意這段代碼只是為了完成類的結構,方法的實現暫時先空著。然后將這段代碼編譯成一個dll動態連接庫文件:UnitTest.dll。

    我們運行NUnit的圖形測試工具,打開我們編譯好的dll文件,點"Run"按紐,就可以看到如下畫面:

    很醒目紅色,表示測試并沒有成功,不過這個是在我們的預料之中的。

    接下來,我們向剛才的Ticket類中完成我們的Add方法實現代碼:

    public void Add(int num)

    {

    amount += num;

    }

    保存,重新編譯。

    切換到NUnit,再點Run,可以看到:

    Add方法已經變成綠色了,再接著將Sell方法也完成:

    public void Sell()

    {

    amount -= 1;

    }

    再來測試,結果就變成:

    啊,總算變成美麗的綠色了,大家現在體會到環保的重要性了吧。:)

    那么可以交任務了嗎?等等,別急,還有個異常沒測試呢,如果我們的Amount小于0的話,就會產生異常,那么,異常怎么測試呢?請接著看。

    測試異常:

    還是跟上面一樣,先寫出測試代碼:

    [Test][ExpectedException(typeof(Exception))]public void ExcpetionTesting(){Ticket ticket = new Ticket();ticket.Add(3);ticket.Sell();ticket.Sell();ticket.Sell();ticket.Sell();}

    其中,[ExpectedException(typeof(Exception))]表示我們希望能捕獲到發生的異常,如果沒有捕獲到異常,則表示測試失敗。

    后面的代碼很好理解,我們加了三張票,卻賣了四張出去,這可不是炒股,以后沒辦法平倉的。:)

    編譯運行,我們看到以下的測試畫面:

    在Ticket類中,我們修改一下Sell方法,讓它變成:

    public void Sell()

    {

    if(amount - 1 < 0)

    throw new Exception("Amount不能為0");

    amount -= 1;

    }

    編譯,再測試,結果如下:

    好了,到了這里就算完成我們的單元測試之旅了,大家對如何在C#中進行單元測試一定已經有了一個基本的認識。另外,NUnit并不是只針對C#,事實上,你可以在任何.Net語言中使用NUnit來測試你的單元,方法都一樣。

    總結:

    單元測試看上去雖然有點麻煩,但是它為程序員提供了一個安全的觀點,讓程序員對自己的程序更加有信心,在減少開發后期進行頻繁Debug所耗費時間的同時也為應用軟件提供了第一道安全防護網,因此,單元測試是提高開發效率和軟件品質的一個重要的手段。

    利用UNint,我們可以在.Net編程過程中非常方便的進行單元測試,它圖形化的界面和簡單而強大的測試框架為我們提供了一個非常舒適而有趣的測試環境,能夠讓程序員覺得進行單元測試并不枯燥乏味,習慣后甚至還能成為一種樂趣。

    看完本文,如果你是引言中那個可憐的程序員的話,你現在就一定能輕松的面對你的項目經理,交上一份令人放心的代碼答卷。


    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    軟件測試技術文章排行榜
    軟件測試技術分類最新內容
    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>