【问题标题】:Is object mocking used extensively?对象模拟是否被广泛使用?
【发布时间】:2008-09-17 12:58:02
【问题描述】:

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

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

【问题讨论】:

    标签: unit-testing mocking


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

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

              【讨论】:

                猜你喜欢
                • 2014-08-11
                • 2016-09-17
                • 1970-01-01
                • 2010-12-18
                • 2011-12-22
                • 1970-01-01
                • 2018-07-31
                • 2010-11-02
                • 1970-01-01
                相关资源
                最近更新 更多