对象嘲笑是否广泛使用?

时间:2008-09-17 12:58:03

标签: unit-testing mocking

我很好奇你们中有多少人把对象的模拟(像JMock,NMock,RhinoMocks这样的框架与单元测试框架一起)纳入你的日常开发过程。你有什么经历?

你知道,我是在GIS(地理信息系统)平台上开发的,其中大多数工作都与某种处理数据的方式有关。由于它的数据对象模型非常复杂(许多类和接口,都是基于COM的),因此模拟也非常困难和繁琐。在这种情况下,模拟会在编写测试套件时产生大量开销。我想知道是否有类似情况的人,或者只是,嘲笑(无论你在哪种情况下)都适合你。

6 个答案:

答案 0 :(得分:5)

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

在用户界面使用中,Mocks很容易构建。而应用程序的设计(Fowler Passive View)很容易融入模拟。对于用于测试数据访问层的模拟,情况并非如此。但我可以说这显然值得付出努力。实际上,大多数“努力”都专注于提出一种可重用的解决方案,该解决方案最大限度地减少了开发人员为创建每个模拟而必须完成的工作。我建议花时间深入挖掘并发现适合您情况的方法,以便您轻松模拟GIS数据层。那 - 或者只是手动模拟每个类。无论哪种方式,运行依赖于模拟的自动化单元测试的能力都是值得的......

答案 1 :(得分:2)

在我的情况下,模拟工作非常好。但是我正在使用Python,它非常动态,它使许多涉及测试的事情变得更加容易。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

尝试测试Sharepoint似乎是模拟是唯一的方法,只有typemock才能让你模拟密封的类。

答案 4 :(得分:1)

在我的案例中非常广泛地使用模拟。模拟通常用于具有外部依赖性的类,例如网络,数据库,文件系统。如果不使用嘲笑,任何这些都可能在测试中引入片状。

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

答案 5 :(得分:1)

Dave Bouman开始尝试构建一个Mocks社区库,用于与ArcObjects相关的单元测试。他的博客和这个svn存储库提供了与单元测试GIS系统相关的很好的信息

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

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