zoukankan      html  css  js  c++  java
  • NUnit,NMock,NCover的使用和范例【转载】

    测试驱动开发(TDD)是一个很时髦的名词。VSTS2005开始附带了一些测试工具。但也有一些很好的开源工具。本文就是介绍三个相关的工具。
     
     
    What is NUnit?
             NUnit是一个单元测试的Framework,是专门针对.Net 来写的。可以在http://www.nunit.org免费下载.
     
    1.         NUnit的运行图
               
               
             
             
        
    进度条的颜色反映了测试执行的状态:
    ·     绿色描述目前所执行的测试都通过
    ·     黄色意味某些测试忽略,但是这里没有失败
    ·     红色表示有失败
    底部的状态条表示下面的状态:
    ·     状态.说明了现在运行测试的状态。当所有测试完成时,状态变为Completed.运行测试中,状态是Running: <test-name> (<test-name>是正在运行的测试名称)
    ·     Test Cases说明加载的程序集中测试案例的总个数。这也是测试树里叶子节点的个数。
    ·     Tests Run 已经完成的测试个数。
    ·     Failures  到目前为止,所有测试中失败的个数.
    ·     Time  显示运行测试时间(以秒计)
    2.     NUnit的常用Attributes
                           
    ·     TestFixtureAttribute
    本属性标记一个类包含测试用例,一个类要能成为Nunit的测试用例,另外访问修饰符必须是Public
    ·     TestAttribute
    标记一个类的方法是可以测试的。另外需要满足:
    1)         访问限制修饰要未Public
    2)         方法不能有参数
    3)         方法不能有返回值
    ·     IgnoreAttribute
    标记一个测试方法,将被Nuint忽略。
    ·     SetupAttribute/TearDownAttribute
    我们测试用例在运行的时候,经常是需要一些常规资源的,如创建数据库链接,操作完成后关闭数据库链接等等。Nunit提供了这两个attributelai支持这种常规的初始化和清楚操作,作用域以测试方法为单位。当每一个测试方法被Nunit执行的时候,会先执行SetupAttribute标记的方法,然后执行测试方法的代码,最后执行TearDownAttribute标记的方法。
    ·     TestFixtureSetupAttribute/TestFixtureTearDownAttribute
    与SetupAttribute/TearDownAttribute类似,但作用域是整个以TestFixtureAttribute标记的类,只会被执行一次。这样避免了每执行一个测试方法就需要初始化,清除的操作,提高了代码效率。
    ·     ExpectedException
    标记一个测试方法将会抛出一个异常,异常的类型与.NET一致
    ·        Category
    将测试用例分类,这样你可以选择你需要的分类来运行测试用例。
    ·     ExplicitAttribute
             忽略一个Test/TestFixture,直到被显式执行。原因是IgnoreAttribute忽略了
    一个test,想要再调用是不可能的,这个时候ExplicitAttribute就派上用场了。

     

     

     

    What is Nmock?
    • 为什么需要Mock
    单元测试的基本原则应该是每次只验证一个方法,但是倘若遇到这样一种情况:
    测试方法依赖于其他一些难以操控的东西,如:网络,数据库。或者是你测试的代码依赖于系统的其他部分,甚至是系统的多个其他部分。在这种情况下,倘若不小心,最终可能发现自己不小心几乎初始化了系统的每一个组件,而所有这一切只是为了给某一个测试创造必要的运行环境。这不仅花费了大量的时间,要命的是这样的测试用例会被引入大量的耦合因素,很难到达“单元”测试的目的。我们该怎么办呢? 这是Mock的测试方法就派上用场了。Mock的英文的字面意思是:嘲笑,模仿,欺骗的意思。通过Mock,我们可以创建很多真实对象的替代品,在测试用例中使用它。
    • 什么情况下考虑使用Mock

     

    1)         真实的对象具有不可确定的行为(如:程序需要通过web service获得股票的实时价格)
    2)         对象很难被创建(如系统环境很难初始化)
    3)         真实对象的某些行为很难被触发(如网络错误,数据库ID自增序列溢出)
    4)         真实的对象令程序运行很缓慢
    5)         真实对象含有UI等不方便测试的因素
    6)         测试需要询问真实对象是如何被调用的(如异步调用的情况,需要验证Callbak的函数)
    7)         真实的对象目前还不存在(如依赖于其他项目组或则需要新的硬件系统)
    • 进行Mock测试的步骤
      • Sample 
      • 测试代码首先引用NMock 框架   
      • NUnit示例代码 
    1)        定义一个接口来描述这个对象
    2)         产品代码实现这个接口
    3)         测试中Mock对象实现这个接口
     
    What is NCover?
      
             http://ncover.org/
     
    一个好的测试应该具有如下品质:
    l 自动化(Automation)
    l 彻底的(Thorough)
    l 可重复的(Repeatable)
    l 独立的(Independent)
    l 专业的(Professional)
    好的单元测试应该是彻底的,它测试了所有可能出现的情况。一个极端的情况是:把每一行代码,代码所有可能的分支,可能抛出的异常都作为测试对象。另外一种情况就是测试最有可能的情况:如各种边界值的情况。事实上,这是一个基于你的项目需求的决策问题。如果你想检验你的测试覆盖率的话,可以借助NCover 之类的工具。
     
    所使用的命令行如下:
    "C:\Program Files\NCover\NCover.Console.exe" "C:\Program Files\NUnit 2.4.1\bin\nunit-console.exe" V:\Web\BCTest\Function\bin\Debug\BCTest.Function.dll /config=app.config /err=D:\NCoverResult\UTest4BC-Error.txt /xml=D:\NCoverResult\UTest4BC-Result.xml //x D:\NCoverResult\Coverage-BC.xml //l D:\NCoverResult\Coverage-BC_Log.log //v //a  BC.Function
  • 相关阅读:
    iOS关于本地推送
    [转]iOS8 自动调整UITableView和UICollectionView布局
    [转]在Storyboard中使用自定义的segue类型
    iOS 判断来电状态CTCallCenter代码块不执行问题的解决
    centos 用docker搭建elasticsearch 集群
    element-ui 使用upload上传文件并解决跨域问题
    mysql 常见关键字大全和引擎的差异
    Guava---文件操作Files
    springboot这个redies 查看内存信息
    人生也要动态规划
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1330718.html
Copyright © 2011-2022 走看看