对象嘲笑是否被广泛使用?

时间:2020-03-05 18:58:46  来源:igfitidea点击:

我很好奇你们中有多少人将对象的模拟(如JMock,NMock,RhinoMocks等框架与单元测试框架结合在一起)纳入日常开发过程。你有什么经验?

我们会看到,我是在GIS(地理信息系统)平台上开发的,该平台的大部分工作都与某种处理数据的方式有关。由于其数据对象模型非常复杂(许多类和接口,全部基于COM),因此模拟也非常困难且麻烦。在这种情况下,编写测试套件时,模拟会产生大量开销。我想知道是否有人处于类似情况,或者仅仅是,嘲笑(无论我们处于何种情况)如何为我们服务。

解决方案

回答

在我的情况下,模拟工作确实很好。但是我使用的是Python,它是如此动态,以至于它使涉及测试的许多事情变得非常容易。

在像我们这样的情况下,当应用程序主要由数据驱动时(据我所知),模拟可能没有那么有用。仅将数据传入并看着它出来就足以进行测试。我只是要确保应用程序足够模块化,因此该方法可以应用于相当小的组件。

回答

模拟在某种项目中很有用。但是,有时进行模拟非常耗时,并且投资回报率很低。

回答

在我最近从事的项目中,我们在单元测试方法中广泛使用了模拟对象。该项目是100%Java,大小适中(大约100,000行未注释的代码)。它是基于Swing的桌面应用程序,我们发现测试用户界面逻辑的唯一有效方法是通过MVC变体设计,该设计使我们能够使用模拟对象代替实际的Swing用户界面类进行自动化测试。我们还在数据访问层(Hibernate / DAO)的测试中广泛使用了模拟。

在用户界面使用中,Mocks易于构建。应用程序的设计(Fowler Passive View)可以轻松地包含模拟。测试数据访问层中使用的模拟不是这种情况。但是我可以说这显然值得付出努力。实际上,大多数"努力"实际上都集中在提出一种可重用的解决方案上,该解决方案将开发人员创建每个单独的模拟程序所需的工作减至最少。我建议花些时间研究一下适合我们情况的方法,该方法可以轻松模拟GIS数据层。那或者只是手动模拟每个类。无论哪种方式,运行依赖于模拟的自动化单元测试的能力都是值得的...

回答

尝试测试Sharepoint似乎是唯一的方法,只有typemock可以让我们模拟密封的类。

回答

在我的情况下,模拟被非常广泛地使用。嘲笑通常用于具有外部依赖项的类,例如网络,数据库,文件系统。如果不使用模拟,这些方法中的任何一种都会在测试中引入片状感。

如果由于要填充大量虚假数据而导致编写的模拟操作成本很高,则可以将一些预填充的数据对象设置为常量,并在测试中使用它们或者对其进行稍微修改的副本。如果此类数据对象具有外部依赖关系,则可以通过分离两个问题的方式对其进行重构。

回答

Dave Bouman发起了一项计划,试图建立Mocks社区库,以用于与ArcObjects相关的单元测试中。他的博客和这个svn存储库包含与单元测试GIS系统相关的大量信息

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

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