NUnit快速入门(一)

纵观软件的开发,测试已经日益成为软件开发过程中的重要环节,通常一个软件的开发周期中测试要占到一半时间甚至更多。而在测试过程中,单元测试更是万里长征第一步,单元测试进行得是否完善,直接影响到后期集成测试的效率。进行单元测试,有许多软件可以自动完成, NUnit 就是其中之一。这是一款与 JUnit 齐名的,同属于 xUnit 家族的单元测试软件(在 http://www.NUnit.org 可以免费得到这款软件)。本文来自于这款软件的 QuickStart 教程。


让我们从一个简单的例子开始。假设我们正在编写一个银行应用程序,而我们有一个这一领域的基本类—— Account 。 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 。我们要测试的第一个类方法是 TransferFuncs 。

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:\nunit\BankSampleTests\AccountTest.cs:line 17 ”

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

public void TransferFunds(Account destination, float amount)

{

destination.Deposit(amount);

Withdraw(amount);

}

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

=======未完待续=======

Published At
Categories with Web编程
Tagged with
comments powered by Disqus