分享
 
 
 

[翻译]NUnit快速入门

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

NUnit快速入门

原文:NUnit文档之QuickStart.doc

翻译:lover_P

[译者序]

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

[正文]

让我们从一个简单的例子开始。假设我们正在编写一个银行应用程序,而我们有一个这一领域的基本类——

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;

}

}

}

}

现在我们来为这个类写一个测试——

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

}

}

}

首先要注意的是这个类关联了一个

这正是预期的结果,因为我们还未实现

destination.Deposit(amount);

Withdraw(amount);

}

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

让我们来为我们的

public float MinimumBalance {

get {

return minimumBalance;

}

}

我们使用一个异常来指出透支:

using System;

public class InsufficientFundsException : ApplicationException {

}

}

向我们的

Account source = new Account();

source.Deposit(200.00F);

Account destination = new Account();

destination.Deposit(150.00F);

source.TransferFunds(destination, 300.00F);

}

这个测试方法除了

destination.Deposit(amount);

if(balance - amount < minimumBalance)

throw new InsufficientFundsException();

Withdraw(amount);

}

编译并运行测试——绿了。成功!不过等等,看看我们刚写的代码,我们会发现银行在每一笔不成功的转账操作时都亏钱了。让我们来写一个测试来确认我们的猜测。添加这个测试方法:

Account source = new Account();

source.Deposit(200.00F);

Account destination = new Account();

destination.Deposit(150.00F);

try {

source.TransferFunds(destination, 300.00F);

}

catch(InsufficientFundsException expected) {

}

Assert.AreEqual(200.00F,source.Balance);

Assert.AreEqual(150.00F,destination.Balance);

}

我们测试了方法的交易属性——是否所有的操作都成功了。编译并运行——红条。是的,我们平白无故地损失了300块钱——

if(balance - amount < minimumBalance) {

throw new InsufficientFundsException();

}

destination.Deposit(amount);

Withdraw(amount);

}

如果

public void TransferWithInsufficientFundsAtomicity() {

// code is the same

}

编译并运行——黄条。单击“Test Not Run”选项卡,你会看到bank.AccountTest.TransferWithInsufficientFundsAtomicity()连同这个测试被忽略的原因一起列在列表中。

看看我们的测试代码,我们可以看到一些适宜的重构。所有的方法共享一组公共的测试对象。让我们来将这些初始化代码放到一个

using System;

using NUnit.Framework;

[TestFixture]

public class AccountTest {

Account source;

Account destination;

[SetUp]

public void Init() {

source = new Account();

source.Deposit(200.00F);

destination = new Account();

destination.Deposit(150.00F);

}

[Test]

public void TransferFunds() {

source.TransferFunds(destination, 100.00f);

Assert.AreEqual(250.00F, destination.Balance);

Assert.AreEqual(100.00F, source.Balance);

}

[Test]

[ExpectedException(typeof(InsufficientFundsException))]

public void TransferWithInsufficientFunds() {

source.TransferFunds(destination, 300.00F);

}

[Test,

Ignore (

"Need to decide how to implement transaction management in the application"

)]

public void TransferWithInsufficientFundsAtomicity() {

try {

source.TransferFunds(destination, 300.00F);

}

catch(InsufficientFundsException expected) {

}

Assert.AreEqual(200.00F,source.Balance);

Assert.AreEqual(150.00F,destination.Balance);

}

}

}

注意这个初始化方法拥有通用的初始化代码,它的返回值类型为

回顶端

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有