您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > Nunit
NUnit入門
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2012/12/21 15:18:21 ] 推薦標簽:

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

[正文]

    讓我們從一個簡單的例子開始。假設我們正在編寫一個銀行應用程序,而我們有一個這一領域的基本類——Aclearcase/" target="_blank" >ccount。Account支持存款、取款和資金轉帳。這個Account類看起來會是這個樣子:

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)在我們來為這個類寫一個測試——AccountTest。我們要測試的第一個類方法是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);
        }
    }
}

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

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

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

    這正是預期的結果,因為我們還未實現(xiàn)TransferFunds()方法。現(xiàn)在我們來搞定它。不要關閉GUI,回到你的IDE并修改代碼,使你的TransferFunds()方法看起來像這樣:

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

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

    讓我們來為我們的Account的代碼添加一些錯誤檢測。為賬戶添加一個小余額限制,通過你的小透支保護費來維持它的持續(xù)運作。首先我們來為Account類添加一個小余額保護屬性:

private float minimumBalance = 10.00F;

public float MinimumBalance {
    get {
        return minimumBalance;
    }
}

    我們使用一個異常來指出透支:

namespace bank {
    using System;

    public class InsufficientFundsException : ApplicationException {
    }
}

    向我們的AccountTest類添加一個新的方法:

[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);
}

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