zoukankan      html  css  js  c++  java
  • Net平台下的Mock工具Rhino Mocks

    Mock对象是一种方便写单元测试的辅助工具。当被测试的某个类需要依赖其它类的时候,采用Mock对象可以模拟出依赖对象的类型和一些特定的调用,从而隔离了被测试单元之间的互相影响。比如你的某个业务逻辑组件需要调用数据库,这个时候就可以用Mock对象模拟出数据库,并给出一些设定好的调用数据,这样当对业务逻辑组件进行测试的时候,即使数据库崩溃也不会让该业务逻辑组件的单元测试亮出一盏红灯。

    Rhino Mocks 是一个.Net平台下的Mock工具,Rhino.Mocks源于EasyMock.Net,它试图提供一种更简单的方法去创建和使用mock objects且使你得到更好的重构支持。 它结合了EasyMock.Net和NMock的方式。.NET 有许多不同的模拟框架,在定义模拟的目标和返回的信息方面,每个框架稍有不同。Rhino.Mocks 是由 Oren Eini(又名 Ayende Rahien)开发的一个开源框架,由于它可以提供强类型化的模拟对象,因而从众多模拟中脱颖而出。大多数可用的模拟框架要求使用硬编码的字符串来定义方法名称和参数,这就意味着您只有在实际运行测试的过程中才会知道存在的潜在问题。Rhino.Mocks 允许使用强类型化的模拟对象,从而使您可以获得编译的所有优点,帮助您尽早发现错误。

    您创建的单元测试越多,运行这些单元测试所需的时间就越长。理想的情形是,单元测试的运行只需几秒钟,这样开发人员每次创建应用程序时都可以运行这些测试。然而,目前大多数应用程序都十分依赖于数据库、Web 服务以及许多其他的外部相关对象。一个大型单元测试如果使用了它们中的任何一个,都不可能在几秒钟内完成。

    事实上,可以让您的单元测试快速运行的唯一方法就是用某物来模拟这个外部相关对象。这时模拟就派上用场了。模拟是让一些对象伪装成您的外部相关对象,以便代码可以使用模拟对象代替外部对象来正常运行。这不仅保证了您的测试可以快速运行,而且更重要的是,它可以让您专注于代码功能的测试,而不是外部相关对象。另外,您还可以对代码和外部相关对象之间的交互进行测试。您将不仅仅对业务层是否可以成功返回对象进行测试,而且还可以测试它是否会在您的数据访问层上调用特定的方法以便检索该对象。

    Rhino.Mocks 允许使用的模拟类型也不是固定的。普通的模拟对象在遇到意外的方法调用时会引发异常。但 Rhino.Mocks 提供了一个动态的模拟对象,在遇到意外的方法调用时会返回“null”或“0”,而不是引发异常。最后,Rhino.Mocks 允许使用部分模拟,这就可以使它在没有定义预期值的情况下避免引发异常,它会在对象上调用最初的方法并返回该值,而不是返回“0”或“null”。这就让您可以只模拟某个对象上所需的方法。

    Rhino.Mocks 还提供了许多其他有用的功能,包括对通用类型的支持、回调,以及模拟委托和事件的能力。

  • 相关阅读:
    OpenStack 多节点纳管 vCenter 5.5
    OpenStack 多节点纳管 vCenter 5.5
    java.utils.UUID类介绍
    BeanUtils工具类
    Request笔记
    JavaEE_XMind总结
    JavaSE_XMind总结
    完成页面的定时跳转
    使用jsp完成商品列表的动态显示
    Respone笔记
  • 原文地址:https://www.cnblogs.com/bugua/p/2311821.html
Copyright © 2011-2022 走看看