您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > Nunit
NUnit入門(mén)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/21 15:18:21 ] 推薦標(biāo)簽:

原著:NUnit v2.1
原文:NUnit文檔之QuickStart.doc
翻譯:lover_P
--------------------------------------------------------------------------------
[譯者序]
    縱觀(guān)軟件的開(kāi)發(fā),測(cè)試已經(jīng)日益成為軟件開(kāi)發(fā)過(guò)程中的重要環(huán)節(jié),通常一個(gè)軟件的開(kāi)發(fā)周期中測(cè)試要占到一半時(shí)間甚至更多。而在測(cè)試過(guò)程中,單元測(cè)試更是萬(wàn)里長(zhǎng)征第一步,單元測(cè)試進(jìn)行得是否完善,直接影響到后期集成測(cè)試的效率。進(jìn)行單元測(cè)試,有許多軟件可以自動(dòng)完成,NUnit是其中之一。這是一款與JUnit齊名的,同屬于xUnit家族的單元測(cè)試軟件(在http://www.NUnit.org我們可以免費(fèi)得到這款軟件)。

[正文]

    讓我們從一個(gè)簡(jiǎn)單的例子開(kāi)始。假設(shè)我們正在編寫(xiě)一個(gè)銀行應(yīng)用程序,而我們有一個(gè)這一領(lǐng)域的基本類(lèi)——Aclearcase/" target="_blank" >ccount。Account支持存款、取款和資金轉(zhuǎn)帳。這個(gè)Account類(lèi)看起來(lái)會(huì)是這個(gè)樣子:

namespace bank {
    public class Account {
        private float balance;

        public void Deposit(float amount) {
            balance += amount;
        }

        public void Withdraw(float amount) {
            balance -= amount;
        }

        public void TransferFunds(Account destination, float amount) {
        }

        public float Balance {
            get {
                return balance;
            }
        }
    }
}

    現(xiàn)在我們來(lái)為這個(gè)類(lèi)寫(xiě)一個(gè)測(cè)試——AccountTest。我們要測(cè)試的第一個(gè)類(lèi)方法是TransferFunds。

namespace bank {
    using NUnit.Framework;

    [TestFixture]
    public class AccountTest {

        [Test]
        public void TransferFunds() {
            Account source = new Account();
            source.Deposit(200.00F);
            Account destination = new Account();
            destination.Deposit(150.00F);

            source.TransferFunds(destination, 100.00F);
            Assert.AreEqual(250.00F, destination.Balance);
            Assert.AreEqual(100.00F, source.Balance);
        }
    }
}

    首先要注意的是這個(gè)類(lèi)關(guān)聯(lián)了一個(gè)[TestFixture]特性(attribute)——這表示這個(gè)類(lèi)包含了測(cè)試代碼(這個(gè)特性可以被繼承)。這個(gè)類(lèi)必須是公有的,但他的父類(lèi)并不受限制。這個(gè)類(lèi)還必須有一個(gè)默認(rèn)構(gòu)造函數(shù)。

    類(lèi)中的一個(gè)方法——TransferFunds(),關(guān)聯(lián)了一個(gè)[Test]特性——這表示它是一個(gè)測(cè)試方法。測(cè)試方法的返回值必須為void并且不能帶有參數(shù)。在我們的測(cè)試方法中,我們對(duì)被測(cè)試的對(duì)象進(jìn)行了一般的初始化,執(zhí)行了被測(cè)試的方法并檢查了對(duì)象的狀態(tài)。Assert類(lèi)定義了一組方法用于檢查給定的條件,在我們的例子中我們使用了AreEqual()方法來(lái)確保交易過(guò)后兩個(gè)賬戶(hù)都有正確的余額(這個(gè)方法有很多重載,我們?cè)谶@個(gè)例子中使用的版本帶有兩個(gè)參數(shù):第一個(gè)參數(shù)是我們的期望值,第二個(gè)參數(shù)是實(shí)際值)。

    編譯并運(yùn)行這個(gè)例子。假設(shè)你已經(jīng)將你的測(cè)試代碼編譯為bank.dll。打開(kāi)NUint Gui(安裝程序會(huì)在你的桌面和“程序”菜單中建立一個(gè)快捷方式),打開(kāi)GUI后,選擇File->Open菜單項(xiàng),找到你的bank.dll并在“Open”對(duì)話(huà)框中選中它。bank.dll裝載后你會(huì)在左邊的面板中看到一個(gè)測(cè)試樹(shù)結(jié)構(gòu),還有右邊的一組狀態(tài)面板。單擊Run按鈕,狀態(tài)條和測(cè)試樹(shù)種的TransferFunds節(jié)點(diǎn)變成了紅色——我們的測(cè)試失敗了。“Errors and Failures”面板顯示如下消息——“TransferFunds: expected <250> but was <150>”,在它正下方的堆棧跟蹤面板報(bào)告了測(cè)試失敗的語(yǔ)句在代碼中的位置——“at bank.AccountTest.TransferFunds() in C: unitBankSampleTestsAccountTest.cs:line 17”

    這正是預(yù)期的結(jié)果,因?yàn)槲覀冞未實(shí)現(xiàn)TransferFunds()方法,F(xiàn)在我們來(lái)搞定它。不要關(guān)閉GUI,回到你的IDE并修改代碼,使你的TransferFunds()方法看起來(lái)像這樣:

public void TransferFunds(Account destination, float amount) {
    destination.Deposit(amount);
    Withdraw(amount);
}

    現(xiàn)在重新編譯你的代碼并再次在GUI中點(diǎn)擊Run按鈕——狀態(tài)條和數(shù)節(jié)點(diǎn)變綠了。(注意GUI會(huì)自動(dòng)地為你重新加載程序集;我們可以一直開(kāi)著GUI而在IDE中繼續(xù)工作并寫(xiě)更多的測(cè)試)。

    讓我們來(lái)為我們的Account的代碼添加一些錯(cuò)誤檢測(cè)。為賬戶(hù)添加一個(gè)小余額限制,通過(guò)你的小透支保護(hù)費(fèi)來(lái)維持它的持續(xù)運(yùn)作。首先我們來(lái)為Account類(lèi)添加一個(gè)小余額保護(hù)屬性:

private float minimumBalance = 10.00F;

public float MinimumBalance {
    get {
        return minimumBalance;
    }
}

    我們使用一個(gè)異常來(lái)指出透支:

namespace bank {
    using System;

    public class InsufficientFundsException : ApplicationException {
    }
}

    向我們的AccountTest類(lèi)添加一個(gè)新的方法:

[Test]
[ExpectedException(typeof(InsufficientFundsException))]
public void TransferWithInsufficientFunds() {
    Account source = new Account();
    source.Deposit(200.00F);
    Account destination = new Account();
    destination.Deposit(150.00F);
    source.TransferFunds(destination, 300.00F);
}

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd