2

我有一个试图为其编写包装器的 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 制作一个模拟对象,我的问题是如何制作一个可以采用不同格式字符串的模拟对象?这将如何帮助我验证包装器中的代码是否正确?

4

1 回答 1

3

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

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

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

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

于 2008-11-03T13:50:27.427 回答