6

我很好奇你们中有多少人将对象模拟(JMock、NMock、RhinoMocks 等框架与单元测试框架携手并进)到您的日常开发过程中。你有什么经验?

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

4

6 回答 6

5

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

在用户界面使用中,Mocks 易于构建。并且应用程序的设计(Fowler Passive View)很容易合并模拟。对于用于测试数据访问层的模拟,情况并非如此。但我可以说,这显然是值得的。事实上,大部分的“努力”真正集中在提出一个可重用的解决方案,以最大限度地减少开发人员创建每个单独的模拟所必须做的工作。我建议您花时间深入研究并发现一种适合您情况的方法,让您可以轻松地模拟您的 GIS 数据层。那 - 或者只是手动模拟每个班级。无论哪种方式,运行依赖于模拟的自动化单元测试的能力都是值得的......

于 2008-09-17T13:08:59.977 回答
2

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

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

于 2008-09-17T13:01:27.093 回答
1

模拟在某种项目中很有用。但是,有时 mocking 非常耗时,而且 ROI 很低。

于 2008-09-17T13:06:51.870 回答
1

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

于 2008-09-17T13:09:01.833 回答
1

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

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

于 2008-09-17T13:10:26.837 回答
1

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

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

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

于 2008-11-04T17:21:42.507 回答