nunit使用指南之—NUnit Quick Start

2016-02-19 09:14 13 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的nunit使用指南之—NUnit Quick Start,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - Web开发 】

NUnit 是为 .NET 框架生成的开放源代码单元测试框架。NUnit 使您可以用您喜欢的语言编写测试,从而测试应用程序的特定功能。当您首次编写代码时,单元测试是一种测试代码功能的很好方法,它还提供了一种对应用程序进行回归测试的方法。NUnit 应用程序提供了一个用于编写单元测试的框架,以及一个运行这些测试和查看结果的图形界面。
  下载地址:http://sourceforge.net/projects/nunitaddin
  本事例所用版本:http://www.cnblogs.com/Files/young18/nunit2.3.rar

NUnit Quick Start

原文档:http://www.nunit.org
翻 译:Young.J
说 明:该实例是最早期的nunit版本中找到,在测试驱动的开发中它并不是一个很好的例子,但它能阐明使用nunit的最基本方法。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

   现在开始我们的例子。假设我们开始写一个银行业的应用程序,我们有一个基类—Account,Account主要负责资金的增加,撤销和转帐,下面是该类的代码

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/) 1namespace bank
 2{
 3    public class Account
 4    {
 5        private float balance;
 6        public void Deposit(float amount)
 7        {
 8              balance+=amount;    
 9        }
10
11        public void Withdraw(float amount)
12        {       
13              balance-=amount;     
14        }
15
16        public void TransferFunds(Account destination, float amount)
17        {     }
18
19        public float Balance
20        {       
21              get{ return balance;}     
22        }
23    }
24}    在我们来写一个需要测试的类—AccountTest,我们第一个测试的方法是TransferFunds  1namespace bank
 2{
 3    using NUnit.Framework;
 4
 5    [TestFixture]
 6    public class AccountTest
 7    {
 8        [Test]
 9        public void TransferFunds()
10        {
11            Account source = new Account();
12            source.Deposit(200.00F);
13            Account destination = new Account();
14            destination.Deposit(150.00F);
15            source.TransferFunds(destination, 100.00F);
16            Assert.AreEqual(250.00F, destination.Balance);
17            Assert.AreEqual(100.00F, source.Balance);
18        }
19    }
20}   现在做的第一件事是声明这个类有一个[TestFixture]属性,通过这种方法显示这个类包含测试代码(此属性可以被继承),这个类必须是public类且其派生内没有限制,这个类当然必须有一个默认构造函数。
   这个类仅有的一个方法—TransferFunds,有一个[Test]属性,显示他是一个测试方法,该方法返回void,没有参数,在这个方法里我们对测试对象作了必须的初始化,Assert类定义了一些方法的集合体,用它来检测设置条件,在我们的例子中,我们用AreEqual方法确保后面两个账户的转帐都有一个正确的剩余资金(这些是一些重载方法,这个例子中用的版本包含下面几个参数,第一个参数是期望值,第二个参试是真实值),
  编译运行这个例子,假设你编译你的代码为bank.dll,运行NUnit Gui,选择File-Open menu item,载入刚才编译过的dll文件,点击run,我们可以看到测试条变成红色—我们的测试失败了,在“Errors and Failures”面板显示一面信息:
       TransferFunds : expected 250 but was 150
  这个现象是我们所期望的,测试失败的原因是我们没有实现TransferFunds方法,现在我们开始让它工作,修改你的TransferFunds方法如下: 1public void TransferFunds(Account destination, float amount)
2{
3    destination.Deposit(amount);
4    Withdraw(amount);
5}  现在我们再次编译代码,并在GUI中运行,我们何以看到测试条变绿!测试成功!
  我们增加一些错误检测在我们的Account代码中,为balance设置一个最小值.依次来保护资金透支量 1private float minimumBalance = 10.00F;
2public float MinimumBalance
3{
4    get{ return minimumBalance;}
5}  增加一个表明透支的异常; 1public class InsufficientFundsException : ApplicationException
2{
3}  增加一个测试方法到AccountTest类中  1[Test]
 2[ExpectedException(typeof(InsufficientFundsException))]
 3public void TransferWithInsufficientFunds()
 4{
 5    Account source = new Account();
 6    source.Deposit(200.00F);
 7    Account destination = new Account();
 8    destination.Deposit(150.00F);
 9    source.TransferFunds(destination, 300.00F);
10}  这个测试方法的[Test]属性有一个 [ExpectedException]属性,这表明这段测试代码期望得到某一类型的异常,如果这种异常没有出现在执行过程中,这车是失败,现在编译代码,启动NUnit Gui,这是测试条变红,提示错误信息:
        TransferWithInsufficentFunds : InsufficientFundsException was expected
  让我们重新配置Account的代码,让它抛出异常,按下面的实例修改TransferFunds方法. 1public void TransferFunds(Account destination, float amount)
2{
3    destination.Deposit(amount);
4    if(balance-amount  minimumBalance)
5        throw new InsufficientFundsException();
6    Withdraw(amount);
7}  编译,运行测试-测试条变绿,成功了,但是,我们看看这个代码,我们仅仅写了我们可以看到的转帐操作中的错误,现在让我们来写一个测试来证实我们不确定的错误,添加下面一个测试方法  1[Test]
 2public void TransferWithInsufficientFundsAtomicity()
 3{
 4    Account source = new Account();
 5    source.Deposit(200.00F);
 6    Account destination = new Account();
 7    destination.Deposit(150.00F);
 8    try
 9    {
10        source.TransferFunds(destination, 300.00F);
11    }
12    catch(InsufficientFundsException expected)
13    {
14    }
15    Assert.AreEqual(200.00F,source.Balance);
16    Assert.AreEqual(150.00F,destination.Balance);
17}   编译运行—红色测试条,我们算错了300元,代码显示正确的结果是150元,但账户显示确是450,那么怎样修补错误,能不能加一段最小基金检测在资金处理之前呢?我们可以在catch块中加以一些修补方法,或依靠我们的管理人员修复对象的规定,我们需要在多方面回答这些问题,但不是在现在,那在此期间我们可以怎么做呢?移出它?一个最好的方法是忽视它,添加以下属性在你的测试方法中 1[Test]
2[Ignore("Decide how to implement transaction management")]
3public void TransferWithInsufficientFundsAtomicity()
4{
5    // code is the same
6}   编译测试代码—黄色,点击"Tests Not Run",我们可以看到bank.AccountTest.TransferWithInsufficientFundsAtomicity() 在被忽视的测试列表里。
  上面是一些常用简单方法,依次来讲解nunit的使用过程,在以后的单元,我们会深入讲解nunit的使用!

来源:https://www.tulaoshi.com/n/20160219/1590020.html

延伸阅读
标签: 电脑入门
当你使用了ImageMagick,你将会发现,大部分的操作,你只要在终端下动动键盘即可,省得你用鼠标点来点去。 下面,我对ImageMagick的主要功能做一个简单的介绍,其中覆盖的大都是人们常用的一些功能,如果你要全面的了解它的知识,你可以看看它的man手册。 convert convert顾名思义就是对图像进行转化,它主要用来对图像进行格式的转化,同时...
标签: Web开发
Hash对象(关联数组)是Prototype新建的一个对象,要创建一个Hash对象可以调用$H(object)方法,因为javascript本身的特点(对象本身就是关联数组) ,所以实现Hash也很简单,Prototype中的Hash只是javascript的关联数组(对象) keys(): 返回hash的键值数组 values(): 返回值得数组 merge(hash): 合并两个hash toQueryString(): 跟string的toQ...
标签: Web开发
这一部分提供了很多与表单操作有关的功能,包括以下部分,当通过$方法返回元素时,可以直接通过$(element).method()调用: Form对象:提供了操作整个表单的一些方法 Form.Element对象:提供了操作某个表单元素的方法 TimedObserver类:周期性表单监视器,当表单元素值改变的时候执行一个回调函数,有Form和Element两种类型 EventObserver类:...
标签: Web开发
Enumerable是一个抽象对象(需要说明的是,javascript中并没有类的概念,所指的类也就是一个函数,继承一般指的是一个对象(父)将它的方法属性copy(通过Object.extend, copy的是引用)到子类(函数)的prototype属性(一个对象)中) Enumerable不能直接使用,它被很多枚举类型(Hash、Array、Range等)所继承,继承的类型都要实现一个_each方法,提供...
标签: Web开发
Selector是利用css selector来匹配选择页面元素的,所以要理解Selector首先应该对css selector有所理解,下面是css2 selector的语法,当然很多浏览器只是支持其中的一部分,Prototype 中的Selector主要支持tag选择器、class选择器和id选择器,还有属性(attribute)选择器,基本上包含我们平时所用的所有类型 The following table summarizes CS...

经验教程

869

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部