提供大家学习交流的空间!

发布新日志

  • 数据表的添加、数据导入、数据导出

    2007-03-29 15:54:26

    测试文件名:datasheet   路径为E:\TestInstance\qtp\ForexampleTest\
    要导入的数据保存在C:\NameTickets.xls 内容为
    name tickets
    aa         1
    bb        2
    cc         3
    在导入数据前E:\TestInstance\qtp\ForexampleTest\datasheet\Default.xls有两个缺省的Sheet 分别为Global Action1均无数据
    运行如下程序:

    DataTable.AddSheet("MySheet")  '在缺省的Default.xls添加一个标单MySheet      
    DataTable.ImportSheet "C:\NameTickets.xls", 1, "MySheet"                                               ' 第二行
    DataTable.ExportSheet "E:\TestInstance\qtp\ForexampleTest\datasheet\Default.xls", 3        ' 第三行
      
    '其中第二行中的1参数 是指从文件“"C:\NameTickets.xls"的第一列开始导入数据到新建的MySheet 中
    '其中第二行中的3参数 是指讲运行过程的数据导出到文件"E:\TestInstance\qtp\ForexampleTest\datasheet\Default.xls"第三个Sheet即新建的MySheet中。
    运行完毕,则在下次打开该测试时就能看见添加了表单MySheet,并且数据已经导入。
    也可以手工打开文件 E:\TestInstance\qtp\ForexampleTest\datasheet\Default.xls来查看。
  • 关于文件的操作

    2007-03-29 11:48:05

    创建文件
    dim fso, f
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    set f = fso.CreateTextFile("C:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖
    f.Write("写入内容")
    f.WriteLine("写入内容并换行")
    f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车)
    f.Close()
    set f = nothing
    set fso = nothing

    打开并读文件
    dim fso, f
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    set f = fso.OpenTextFile("C:\test.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建
    f.Skip(3) '将当前位置向后移三个字符
    f.SkipLine() '将当前位置移动到下一行的第一个字符,注意:无参数
    response.Write f.Read(3) '从当前位置向后读取三个字符,并将当前位置向后移三个字符
    response.Write f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数
    response.Write f.ReadAll() '从当前位置向后读取,直到文件结束,并将当前位置移动到文件的最后
    if f.atEndOfLine then
        response.Write("一行的结尾!")
    end if
    if f.atEndOfStream then
        response.Write("文件的结尾!")
    end if
    f.Close()
    set f = nothing
    set fso = nothing

    打开并写文件
    dim fso, f
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    set f = fso.OpenTextFile("C:\test.txt", 2, false) '第二个参数 2 表示重写,如果是 8 表示追加
    f.Write("写入内容")
    f.WriteLine("写入内容并换行")
    f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车)
    f.Close()
    set f = nothing
    set fso = nothing

    判断文件是否存在
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    if fso.FileExists("C:\test.txt") then
        response.Write("目标文件存在")
    else
        response.Write("目标文件不存在")
    end if
    set fso = nothing

    移动文件
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    call fso.MoveFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同
    set fso = nothing

    复制文件
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    call fso.CopyFile("C:\test.txt", "D:\test111.txt") '两个参数的文件名部分可以不同
    set fso = nothing

    删除文件
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    fso.DeleteFile("C:\test.txt")
    set fso = nothing

    创建文件夹
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    fso.CreateFolder("C:\test") '目标文件夹的父文件夹必须存在
    set fso = nothing

    判断文件夹是否存在
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    if fso.FolderExists("C:\Windows") then
        response.Write("目标文件夹存在")
    else
        response.Write("目标文件夹不存在")
    end if
    set fso = nothing

    删除文件夹
    dim fso
    set fso = server.CreateObject("scrīpting.FileSystemObject")
    fso.DeleteFolder("C:\test") '文件夹不必为空
    set fso = nothing
  • 模板的应用

    2007-03-27 15:05:31

    新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,
     并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
    例如:
    '-------------------脚本说明---------------
    '产品版本:      __Build(  )
    '测试员:
    '编写日期:
    '测试功能:
    '脚本类型:
    '被测试对象初始状态:
    '进展程度:
    '基本思路:
    '主要功能函数:
    '历史修改:
    '没解决的问题:
    '--------------------脚本内容-------------

    当然了,脚本的说明内容可以随意修改,但必须保存到dat目录下,并且文件的名字为:ActionTemplate.MST

  • Action之间参数传递

    2007-03-27 15:02:45

    Action之间的参数传递
    例如:在Action1中,有如下代码:
    out_str="This is out_string"
    RunAction "Action2",oneIteration,out_str
    在Acton2中,在其step->Action Properties中的,input参数栏,加入out_str后,
    msgbox(parameter("out_str")),就能正确显示参数了 

    按照该方法如下:

    1.加入Action1后,输入:out_str="This is out_string"
    RunAction "Action2",oneIteration,out_str

    2.然后再加入Action2,注意:Action1和Action2是并列关系,

    在其step->Action Properties中的,input参数栏,加入out_str后,

    这是在Action2中输入:msgbox(parameter("out_str"))

    当运行的时候会出现两个msgbox,其中第一个显示内容为:"This is out_string" ;第二个msgbox显示内容为:空;

    当把和Action1并列的那个Action2去掉后就可以出现一个msgbox,其中显示内容为:"This is out_string",

    结论: Action1和Action2为父子关系时,才会出现传递的参数内容。

  • QTP识别和操作对象的原理

    2007-03-26 11:36:49

    QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。
    对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。
    对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。


    两种接口的脚本书写格式的差别在于:
      自身接口需要在对象名后面加object再加属性名或方法名,
      封装接口就不用在对象名后面加object。

    比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
      设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
      读取JavaEdit的内容:
         msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")

    如果通过JavaEdit的自身接口,脚本如下:
      设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
      读取JavaEdit的内容:
         Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()

    QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
    QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。
    JavaEdit对象的封装接口Set()和GetROProperty("value"),是QTP封装JavaEdit对象的自身接口setText()和getText()而得来的。

    对象的封装接口是QTP使用的缺省接口,我们录制出来的脚本都是使用封装接口,大家用的也都是封装接口。
    但是封装接口不如自身接口丰富,因为QTP只是封装了部分常用的自身接口嘛。
    所以我们在需要时,可以绕过封装接口,直接调用对象的自身接口。
    不过有些自身接口不够稳定,在实践中偶尔会出现问题,但是概率很少。
    封装接口有相应功能的话,就尽量用封装接口吧!


    理解了封装接口和自身接口的原理,我们就可以更加灵活的操作对象了。

    但是我们怎么知道对象都有哪些封装接口和自身接口呢?
    其实很简单,用对象查看器(Object Spy)查看对象,在查看窗口里有列出这些接口,包括属性和方法。
    窗口中间有选择栏让你选择Run-time Object或者Test Object,
    当你选择Run-time Object时,它显示的就是对象的自身接口(自身的属性和方法)
    当你选择Test Object时,它显示的就是对象的封装接口(封装的属性和方法)

    明白了这些,你还等什么呢?快拿起对象查看器,看看对象都有哪些封装接口和自身接口,肆意的操作它,玩弄它吧!

    比如执行
      JavaDialog("Add NE").JavaEdit("NE Name").object.setVisible(false)
    哈哈,你的JavaEdit对象就当场消失不见了!!!
  • GetROProperty,GetTOProperties,GetTOProperty的区别

    2007-03-26 11:30:40

    应该说TO是仓库文件里定义的仓库对象,RO是被测试软件的实际对象
    QTP要求先在仓库文件里定义仓库对象,里面存有实际对象的特征属性的值,
    运行的时候,QTP会根据仓库对象的特征属性描述,寻找到实际对象,然后操作实际对象。

    仓库对象TO一般在录制/编写脚本时加入仓库文件,它不仅可以在编写时进行修改,
    也可以在运行过程中进行动态修改,以匹配实际对象。

    相关的几个函数有:

    GetTOProperty():取得仓库对象的某个属性的值
    GetTOProperties():取得仓库对象的所有属性的值
    SetTOProperty():设置仓库对象的某个属性的值

    GetROProperty():取得实际对象的某个属性的值


    理解了TO的含义,你就可以自由的用SetTOProperty()定义TO,以灵活的操作RO

    比如有个测试任务,窗口上有很多待检查的记录,每条记录右边都有一个Check按钮,用来检查各条记录。
    记录个数不定,所以Check按钮个数也就不定,只有一个Edit显示记录个数。
    我们要对每条记录进行检查,也就是要点击每个Check按钮。
    但是Check按钮个数不定,不好录制,而且个数可能也很多(上百个),即使能一一录制,那也很麻烦。

    那我有一个好办法,只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
    然后用下面的脚本,就可以完成测试

    buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
    For buttonIndex = 0 to buttonNum - 1
      JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
      JavaWindow("Test").JavaButton("Check").Click
    Next


    或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去
    我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试

    JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")
    JavaWindow("Test").JavaButton("AnyButton").Click

    JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")
    JavaWindow("Test").JavaButton("AnyButton").Click

    JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")
    JavaWindow("Test").JavaButton("AnyButton").Click

    JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")
    JavaWindow("Test").JavaButton("AnyButton").Click


    另外,QTP还支持脚本描述的方法来定义和访问对象,即不需要在仓库里定义,也能访问和操作实际对象

    如上面两个任务,可以如下实现

    1. 不需要在仓库里定义Check按钮对象,直接用下面脚本来实现测试

    buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
    For buttonIndex = 0 to buttonNum - 1
      JavaWindow("Test").JavaButton("label:=Check", "index:="+CStr(buttonIndex)).Click
    Next

    2. 不需要在仓库里定义New、Modify、Delete、Check按钮对象,直接用下面脚本来实现测试

    JavaWindow("Test").JavaButton("label:=New").Click
    JavaWindow("Test").JavaButton("label:=Modify").Click
    JavaWindow("Test").JavaButton("label:=Delete").Click
    JavaWindow("Test").JavaButton("label:=Check").Click
  • 用Office合并列数据 快速完成报表

    2007-03-23 11:37:35

    利用Excel管理教职工档案时,需要将“毕业院校”与“专业”分两列保存,但在做报表时要在一列中完成“毕业院校及专业”,即需要把两列数据合并到一列中(如图1)。如何完成合并转换呢? -v._*H&mo2  

      这时大家自然想到利用函数“CONCATENATE”合并两列数据的方法了。只要在目标单元格中输入“=CONCATENATE(B2,C2)”,就可以把B2与C2两个单元格内的数据合并到一个单元格中,但这种合并结果是将原单元格内容无间隙合并的,即结果是“曲阜师范大学体育”,而我们要达到的效果是“曲阜师范大学 体育”,院校与专业之间加上空格。如何达到这一效果呢? Hhq W >q  
    2#$ikE_XqT  
      首先在B列与C列之间插入一空列,再在插入列的单元格中输入一个空格,再利用拖动复制法将整个插入列变成“空格列”(如图2)。然后在目标单元格中输入“=CONCATENATE(B2,C2,D2)”,并复制到所有相关单元格中,这样快速完成报表需要。 4`l#j  

    hBZ#=~i  
      小提示:利用“&”符号代替函数“CONCATENATE”也可以完成上述工作。如在目标单元格中输入“=B2&C2& D2”,也可得到“曲阜师范大学 体育”。

  • [转] NUnit2.0详细使用方法

    2007-03-21 16:51:37

    前一段时间,有人问我在.NET里如何进行TDD开发.这个问题促使我想对NUnit做一个详细的介绍.因为我们大家都知道NUnit是在.NET进行TDD的利器.

           如果你已经知道很多关于NUnit的应用,请指出我的不对之处和提出一些建议,使本文更加完善.如果你对NUnit还不是很了解的话,我建议你还是阅读一下.
         本文分为以下部分:

    1. TDD的简介

    首先什么是TDD呢?Kent Beck在他的<<测试驱动开发 >>(Addison-Wesley Professional,2003)一书中,使用下面2个原则来定义TDD:
    ·        除非你有一个失败的自动测试,永远不要写一单行代码.
    ·        阻止重复
           我想第一个原则是显而易见的.在没有失败的自动测试下就不要写代码.因为测试是嵌入在代码必须满足的需求中.如果没有需求,就没有必要实现任何东西.所以这个原则阻止我们去实现那些没有测试和在解决方案中不需要的功能.
    第二个原则说明了在一个程序中,不应该包含重复的代码.如果代码重复,我想这就是不好的软件设计的象征.随着时间的流逝,它会对程序造成不一致的问题,并且使代码变非常混乱 ,因为我们时常不会记得重复代码的位置.如果发现代码重复,我想我们应该立即删除代码重复.其实这就涉及到重构了.在这里我就不多讲了.
    一般来说,测试分为2种类型,一是程序员自己的测试,另外一种是客户的测试.关于客户测试,我推荐一个FIT的框架,非常不错。在这里,我们讲的TDD就是程序员测试.那么什么是程序员测试呢?我认为就是我们常说的单元测试.既然是单元测试,在.NET里势必会用到某些工具,目前最著名恐怕就是我即将介绍的NUnit了,

    2.NUnit的介绍

    NUnit是一个单元测试框架,专门针对于.NET来写的.其实在前面有
    JUnit(Java),CPPUnit(C++),他们都是xUnit的一员.最初,它是从JUnit而来.现在的版本是2.2.接下来我所用的都是基于这个版本.
    NUnit最初是由James W. Newkirk, Alexei A. Vorontsov 和Philip A. Craig, 后来开发团队逐渐庞大起来.在开发过程中, Kent Beck 和Erich Gamma2位牛人也提供了许多帮助.看来对于NUnit还真是下了一番力气了.J
     NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等.
     最重要的一点是它适合于所有.NET语言.
          如果你还没有下载,可以到http://www.nunit.org/去下载.

    2.1 NUnit的介绍

       Ok,下面正式讲解NUnit.在讲解之前,看看几张图片:
         
    图1  NUnit运行的效果

                         图2   NUnit运行的另外一个效果
           从中我们可以非常容易发现,右边是个状态条,图1是红色的,图2是绿色的.为什么会这样呢?因为如果所有测试案例运行成功,就为绿色,反之如果有一个不成功,则为红色,但也有黄色的.左面的工作域内则是我们写的每一个单元测试.
    通过上面的图片,我想你对NUnit有个总的了解了.
    接下来还是分为2个部分,一是NUnit的布局,另外一部分就是它的核心概念.
    首先熟悉一下NUnit GUI的布局.
    让我们更进一步看一下测试运行器窗口的布局。在右边面板的中间,可以看到测试进度条。进度条的颜色反映了测试执行的状态:
    绿色 描述目前所执行的测试都通过
    黄色 意味某些测试忽略,但是这里没有失败
    红色 表示有失败
    底部的状态条表示下面的状态:
    状态.说明了现在运行测试的状态。当所有测试完成时,状态变为Completed.运行测试中,状态是Running: <test-name> (<test-name>是正在运行的测试名称)。
    Test Cases说明加载的程序集中测试案例的总个数。这也是测试树里叶子节点的个数。
    Tests Run 已经完成的测试个数。
    Failures  到目前为止,所有测试中失败的个数.
    Time  显示运行测试时间(以秒计)
    File主菜单有以下内容:
    New Project允许你创建一个新工程。工程是一个测试程序集的集合。这种机制让你组织多个测试程序集,并把他们作为一个组对待。
    Open 加载一个新的测试程序集,或一个以前保存的NUnit工程文件。
    Close关闭现在加载的测试程序集或现在加载的NUnit工程。
    Save 保存现在的Nunit工程到一个文件。如果正工作单个程序集,本菜单项允许你创建一个新的NUnit工程,并把它保存在文件里。
    Save As允许你将现有NUnit工程作为一个文件保存。
    Reload 强制重载现有测试程序集或NUnit工程。NUnit-Gui自动监测现加载的测试程序集的变化。
    当程序集变化时,测试运行器重新加载测试程序集。(当测试正运行时,现在加载的测试程序集不会重新加载。在测试运行之间测试程序集仅可以重新加载。一个忠告:如果测试程序集依赖另外一个程序集,测试运行器不会观察任何依赖的程序集。对测试运行器来说,强制一个重载使全部依赖的程序集变化可见。
    Recent Files  说明5个最近在NUnit中加载的测试程序集或NUnit工程(这个列表在Windows注册表,由每个用户维护,因此如果你共享你的PC,你仅看到你的测试)。最近程序集的数量可以使用Options菜单项修改,可以访问Tool主菜单。
    Exit退出。
     View菜单有以下内容:
    Expand一层层扩展现在树中所选节点
    Collapse 折叠现在树中选择的节点
    Expand All递归扩展树中所选节点后的所有节点
    Collapse All递归折叠树中所选节点后的所有节点
    Expand Fixtures扩展树中所有代表测试fixture的节点。
    Collapse Fixtures 折叠树中所有代表测试fixture的节点。
    Properties 显示树中现所选节点的属性。
    Tools 菜单由这些项:
    Save Results as XML作为一XML文件保存运行测试的结果。
    Options让你定制NUnit的行为。
    现在看看右边,你已经熟悉Run按钮和进度条。这里还有一个紧跟Run按钮的Stop按钮:点击这个按钮会终止执行正运行的测试。进度条下面是一个文本窗口,在它上方,由以下4个标签:
    Errors and Failures 窗口显示失败的测试。在我们的例子里,这个窗口是空。
     Tests Not Run 窗口显示没有得到执行的测试。
    Console.Error 窗口显示运行测试产生的错误消息。这些此消息是应用程序代码使用Console.Error输出流可以输出的。
    Console.Out窗口显示运行测试打印到Console.Error输出流的文本消息。

    2.2 一些常用属性

            接下来,我将讲述这个框架如何使用.同时也涉及到一些非常重要的概念,我想其客户属性是非常重要的.在NUnit里,有以下几种属性:
    • Test Fixture
    • Test
    下面我将对每种属性一一讲解.

    TestFixtureAttribute

        本属性标记一个类包含测试,当然setup和teardown方法可有可无.(关于setup 和teardown方法在后面介绍)
        做为一个测试的类,这个类还有一些限制
    • 必须是Public,否则NUnit看不到它的存在.
    • 它必须有一个缺省的构造函数,否则是NUnit不会构造它.
    • 构造函数应该没有任何副作用,因为NUnit在运行时经常会构造这个类多次,如果要是构造函数要什么副作用的话,那不是乱了.
    举个例子
     
    
     1  using System;
     2  using NUnit.Framework;
     3  namespace MyTest.Tests
     4{
     5
     6  [TestFixture]
     7  public class PriceFixture
     8  {
     9    // 
    10  }

    11}

    12
     

    TestAttribute

        Test属性用来标记一个类(已经标记为TestFixture)的某个方法是可以测试的.为了和先前的版本向后兼容,头4个字符(“test”)忽略大小写.
    (参看http://nunit.org/test.html)
    这个测试方法可以定义为:
           
    
    public void MethodName()
        从上面可以看出,这个方法没有任何参数,其实测试方法必须没有参数.如果我们定义方法不对的话,这个方法不会出现在测试方法列表中.也就是说在NUnit的界面左边的工作域内,看不到这个方法.还有一点就是这个方法不返回任何参数,并且必须为Public.
       例如:
     
    
     1using System;
     2using NUnit.Framework;
     3
     4namespace MyTest.Tests
     5{
     6  [TestFixture]
     7  public class SuccessTests
     8  {
     9    [Test] public void Test1()
    10    /*  */ }
    11  }

    12}

    13
    14
    一般来说,有了上面两个属性,你可以做基本的事情了.
    
    另外,我们再对如何进行比较做一个描述。
    
    在NUnit中,用Assert(断言)进行比较,Assert是一个类,它包括以下方法:
    AreEqual,AreSame,Equals, Fail,Ignore,IsFalse,IsNotNull,
    具体请参看NUnit的文档。

    3.如何在.NET中应用NUnit

      我将举个例子,一步一步演示如何去使用NUnit.

    第1步.为测试代码创建一个Visual Studio工程。

    在Microsoft Visual Studio .NET中,让我们开始创建一个新的工程。选择Visual C#工程作为工程类型,Class Library作为模板。将工程命名为NUnitQuickStart.图4-1是一个描述本步骤的Visual Studio .NET。
     
                                图 4-1: 创建第一个NUnit工程

    第2步.增加一个NUnit框架引用

    在Microsoft Visual Studio .NET里创建这个例子时,你需要增加一个nunit.framework.dll引用,如下:
    在Solution Explorer右击引用,然后选择增加引用
       nunit.framework组件,在Add Reference对话框中按Select和OK按钮。
    图4-2 描述了这步:
     
    图 4-2: 增加一个 nunit.framework.dll 引用到工程

    第3步.为工程加一个类.

    为工程加一个NumbersFixture类。这里是这个例子的代码。
     1using System; 
     2using NUnit.Framework; 
     3  
     4namespace NUnitQuickStart 
     5
     6            [TestFixture] 
     7            public class NumersFixture 
     8            
     9                        [Test] 
    10                        public void AddTwoNumbers() 
    11                        
    12                                    int a=1
    13                                    int b=2
    14                                    int sum=a+b; 
    15                                    Assert.AreEqual(sum,3); 
    16                        }
     
    17            }
     
    18}

    19

    第4步.建立你的Visual Studio 工程,使用NUnit-Gui测试

    从程序->NUnit2.2打开NUnit-gui,加载本本工程编译的程序集.
    为了在Visual Studio .NET中自动运行NUnit-Gui,你需要建立NUnit-Gui作为你的启动程序:
    在 Solution Explorer里右击你的NunitQuickStart工程。
    在弹出菜单中选择属性。
    在显示的对话框的左面,点击Configuration Properties夹
    选择出现在Configuration Properties夹下的Debugging。
    在属性框右边的Start Action部分,选择下拉框的Program作为Debug Mode值。
    按Apply按钮
    设置nunit-gui.exe 作为Start Application。,你既可以键入nunit-gui.exe的全路径,也可使用浏览按钮来指向它。
    图4-3 帮助描述本步骤:
      
    图 4-3:将NUnit-Gui 作为工程的测试运行器

    第5步.编译运行测试.

     现在编译solution。成功编译后,开始应用程序。NUnit-Gui测试运行器出现。当你第一次开始NUnit-Gui,它打开时没有测试加载。从File菜单选择Oprn,浏览NUnitQuickStart.dll的路径。当你加载了测试的程序集,测试运行器为加载的程序集的测试产生一个可见的表现。在例子中,测试程序集仅有一个测试,测试程序集的结构如图4-4所示:
     
     图 4-4: 测试程序集的测试在 NUnit-Gui中的视图
    按Run按钮。树的节点变为绿色,而且测试运行器窗口上的进度条变绿,绿色代表成功通过。

    4.其他的一些核心概念

       上面的例子介绍了基本的NUnit特性和功能. TestFixture, Test, 和 Assert是3个最基本的特征,我们可以用这些特性进行程序员测试了.但是有的时候,你觉得这3个远远不够,比如有的时候打开一个数据库连接多次,有没有只让它打开一次的方法呢?如果我想把测试分类,应该怎样实现呢?如果我想忽略某些测试,又应该如何去完成呢?不用担心,NUnit已经有这样的功能了.
    下面我们一一作出回答.

    SetUp/TearDown 属性

    在早期给的test fixture定义里,我们说test fixture的测试是一组常规运行时资源.在测试完成之后,或是在测试执行种,或是释放或清除之前,这些常规运行时资源在一确定的方式上可能需要获取和初始化.NUnit使用2个额外的属性:SetUpTearDown,就支持这种常规的初始化/清除.我们上面的例子来描述这个功能.让我们增加乘法.
     1using System; 
     2using NUnit.Framework; 
     3  
     4namespace NUnitQuickStart 
     5
     6            [TestFixture] 
     7            public class NumersFixture 
     8            
     9                        [Test] 
    10                        public void AddTwoNumbers() 
    11                        
    12                                    int a=1
    13                                    int b=2
    14                                    int sum=a+b; 
    15                                    Assert.AreEqual(sum,3); 
    16                        }
     
    17                        [Test] 
    18                        public void MultiplyTwoNumbers() 
    19                        
    20                                    int a = 1
    21                                    int b = 2
    22                                    int product = a * b; 
    23                                    Assert.AreEqual(2, product); 
    24                        }
     
    25  
    26            }
     
    27}
     
    28
       我们仔细一看,不对,有重复的代码,如何去除重复的代码呢?我们可以提取这些代码到一个独立的方法,然后标志这个方法为SetUp 属性,这样2个测试方法可以共享对操作数的初始化了,这里是改动后的代码: 
     1using System; 
     2using NUnit.Framework; 
     3  
     4namespace NUnitQuickStart 
     5
     6            [TestFixture] 
     7            public class NumersFixture 
     8            
     9                        private int a; 
    10                        private int b; 
    11                        [SetUp] 
    12                        public void InitializeOperands() 
    13                        
    14                                    a = 1
    15                                    b = 2
    16                        }
     
    17  
    18                        [Test] 
    19                        public void AddTwoNumbers() 
    20                        
    21                                    int sum=a+b; 
    22                                    Assert.AreEqual(sum,3); 
    23                        }
     
    24                        [Test] 
    25                        public void MultiplyTwoNumbers() 
    26 查看(434) 评论(0) 收藏 分享 管理

  • 利用函数实现Excel表格自动隔行着色.doc

    2007-03-21 16:47:51

    暂无

我的存档

数据统计

  • 访问量: 8104
  • 日志数: 10
  • 书签数: 1
  • 建立时间: 2007-03-21
  • 更新时间: 2007-03-29

RSS订阅

Open Toolbar