【问题标题】:How would I do TDD with a COM OLE object我将如何使用 COM OLE 对象进行 TDD
【发布时间】:2010-09-20 11:50:06
【问题描述】:

我有一个试图为其编写包装器的 OLE COM 对象,我决定开始使用 TDD 来为其编写代码,因为我相信它会让我对我正在尝试的事情有更好的方向感来写。 COM 对象有一个这样的接口:

Interface Mapinfo
    Sub [Do](ByVal cmd As String)
    Function Eval(ByVal cmd As String) As String
End Interface

[Do] 命令将采用以下内容

Mapinfo.Do("OpenTable("""C:\Temp\MyTable.TAB""")")

现在我正在尝试编写一个包装器,所以有一个这样的函数:

Mapinfo.OpenTable("C:\Temp\MyTable.TAB")

现在我遇到的主要问题是,每次我想编写一个新测试和一些代码时,我都必须创建一个 OLE 对象的实例,等待应用程序启动(30 秒+),测试我的小函数,关闭并处理 OLE 对象,更改代码并再次运行它。

我的问题是:有没有更好的方法来完成所有这些操作,而不必每次都启动 OLE 应用程序?我听说过模拟对象,但并没有真正研究过,他们会在这里帮助我吗?如果有怎么办?

编辑:我现在意识到我必须为 Mapinfo 制作一个模拟对象,我的问题是如何制作一个可以采用不同格式字符串的模拟对象?这将如何帮助我验证包装器中的代码是否正确?

【问题讨论】:

    标签: vb.net testing com tdd ole


    【解决方案1】:

    是的,模拟对象会有所帮助。本质上,您通过模拟 Mapinfo 接口创建了一个伪造的 Mapinfo 对象(您应该重命名该 IMapInfo,顺便说一句)。

    然后,您可以指示该 mock 期望什么调用,以及返回什么结果(如果合适)。您还可以创建测试,其中模拟抛出异常或执行其他难以使用真实对象调用的事情。

    两大(免费).NET 模拟框架是MoQRhino Mocks。 Rhino 更加成熟,并且有更多的方式来配置 mock。 MoQ 是新来者,与 Rhino 相比,功能集更小,设定期望的方式也更少。

    就我个人而言,我认为 MoQ 更适合新来的 mocking。它相对容易理解,所有文档都与当前版本相关(搜索 Rhino 教程,你会发现几年前的垃圾,不再适用),而且性能很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2017-11-11
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      相关资源
      最近更新 更多