NUnit入门

Serena ·
更新时间:2024-09-21
· 936 次阅读

原著:NUnit v2.1 原文:NUnit文档之QuickStart.doc 翻译:lover_P -------------------------------------------------------------------------------- [译者序]     纵观软件的开发,测试已经日益成为软件开发过程中的重要环节,通常一个软件的开发周期中测试要占到一半时间甚至更多。而在测试过程中,单元测试更是万里长征第一步,单元测试进行得是否完善,直接影响到后期集成测试的效率。进行单元测试,有许多软件可以自动完成,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;             }         }     } }

    现在我们来为这个类写一个测试——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);         }     } }

    首先要注意的是这个类关联了一个[TestFixture]特性(attribute)——这表示这个类包含了测试代码(这个特性可以被继承)。这个类必须是公有的,但他的父类并不受限制。这个类还必须有一个默认构造函数。

    类中的一个方法——TransferFunds(),关联了一个[Test]特性——这表示它是一个测试方法。测试方法的返回值必须为void并且不能带有参数。在我们的测试方法中,我们对被测试的对象进行了一般的初始化,执行了被测试的方法并检查了对象的状态。Assert类定义了一组方法用于检查给定的条件,在我们的例子中我们使用了AreEqual()方法来确保交易过后两个账户都有正确的余额(这个方法有很多重载,我们在这个例子中使用的版本带有两个参数:第一个参数是我们的期望值,第二个参数是实际值)。

    编译并运行这个例子。假设你已经将你的测试代码编译为bank.dll。打开NUint Gui(安装程序会在你的桌面和“程序”菜单中建立一个快捷方式),打开GUI后,选择File->Open菜单项,找到你的bank.dll并在“Open”对话框中选中它。bank.dll装载后你会在左边的面板中看到一个测试树结构,还有右边的一组状态面板。单击Run按钮,状态条和测试树种的TransferFunds节点变成了红色——我们的测试失败了。“Errors and Failures”面板显示如下消息——“TransferFunds: expected <250> but was <150>”,在它正下方的堆栈跟踪面板报告了测试失败的语句在代码中的位置——“at bank.AccountTest.TransferFunds() in C: unitBankSampleTestsAccountTest.cs:line 17”

    这正是预期的结果,因为我们还未实现TransferFunds()方法。现在我们来搞定它。不要关闭GUI,回到你的IDE并修改代码,使你的TransferFunds()方法看起来像这样:

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

    现在重新编译你的代码并再次在GUI中点击Run按钮——状态条和数节点变绿了。(注意GUI会自动地为你重新加载程序集;我们可以一直开着GUI而在IDE中继续工作并写更多的测试)。

    让我们来为我们的Account的代码添加一些错误检测。为账户添加一个小余额限制,通过你的小透支保护费来维持它的持续运作。首先我们来为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); }



nunit

需要 登录 后方可回复, 如果你还没有账号请 注册新账号