代码之家  ›  专栏  ›  技术社区  ›  petr k.

对象模拟是否广泛使用?

  •  6
  • petr k.  · 技术社区  · 16 年前

    我很好奇你们中有多少人将对象模拟(像jmock、nmock、rhinomock这样的框架与单元测试框架一起)纳入到日常的开发过程中。你的经历是什么?

    你看,我是在地理信息系统平台的基础上开发的,在这个平台中,大部分工作都与处理数据的某种方式有关。由于它的数据对象模型非常复杂(许多类和接口都是基于COM的),所以模拟也非常困难和麻烦。在这种情况下,在编写测试套件时,模拟会产生大量开销。我想知道是否有人处于类似的情况,或者只是,嘲笑(在任何情况下)是如何为你工作的。

    6 回复  |  直到 16 年前
        1
  •  5
  •   user14636    16 年前

    在我最近的一个项目中,我们在单元测试方法中广泛使用了模拟对象。该项目是100% Java和中等大小(约100000行的非注释代码)。这是一个基于Swing的桌面应用程序——我们发现测试用户界面逻辑的唯一有效方法是通过MVC变体设计,允许我们使用模拟对象代替实际的Swing用户界面类来进行自动测试。我们还在数据访问层(hibernate/daos)的测试中广泛使用模拟。

    在用户界面的使用中,mock的构建既简单又简单。而应用程序的设计(Fowler被动视图)则很容易融入到模拟中。这不是用于测试数据访问层的模拟的情况。但我可以说,这显然值得付出努力。事实上,大多数的“努力”实际上都集中在提出一个可重用的解决方案,它最小化了开发人员为创建每个单独的模拟所必须做的工作。我建议您花点时间深入研究并发现一种适合您的情况的方法,它允许您轻松地模拟地理信息系统数据层。或者只是手动模拟每个类。无论哪种方式,运行依赖模拟的自动化单元测试的能力都是值得的…

        2
  •  2
  •   Paweł Hajdan    16 年前

    在我的情况下模仿工作 真不错。 但是我使用的是python,它非常动态,使得很多涉及测试的事情变得非常简单。

    在像你这样的情况下,当申请主要是 数据驱动 (据我所见),嘲笑可能没有那么有用。仅仅传入数据并观察它的输出就足以进行测试了。我只想确定申请是 足够模块化 因此,这种方法可以应用于相当小的组件。

        3
  •  1
  •   David    16 年前

    模拟在某些项目中是有用的。但是,有时候嘲笑是非常耗时的,而且它的投资回报率很低。

        4
  •  1
  •   Loofer    16 年前

    尝试测试SharePoint似乎只有模拟 typemock 会让你模拟密封课程。

        5
  •  1
  •   Jiayao Yu    16 年前

    在我的例子中,模仿被广泛使用。模拟通常用于具有外部依赖关系的类,例如网络、数据库、文件系统。如果不使用模拟,任何这些都可以在测试中引入薄片。

    如果由于存在大量要填充的假数据而导致编写成本高昂的模拟,可以将一些预填充的数据对象设置为常量,并在测试中使用它们或稍微修改过的副本。如果这样的数据对象具有外部依赖性,那么可以通过某种方式重构它,从而分离这两个关注点。

        6
  •  1
  •   stark    15 年前

    DaveBouman发起了一项计划,试图建立一个用于ArcObjects相关单元测试的Mock社区库。他的博客和这个SVN存储库有很多关于单元测试GIS系统的信息。

    http://blog.davebouwman.net/CategoryView,category,Unit%2BTesting.aspx

    http://svn2.assembla.com/svn/arcdeveloper/TestingUtilities/trunk/