我该如何使用TDD测试COM OLE对象?

3

我有一个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制作一个模拟对象,我的问题是如何制作一个可以接受不同格式字符串的模拟对象?这如何帮助我验证我的包装器中的代码是否正确?
1个回答

3

是的,模拟对象会有帮助。基本上,您通过模拟Mapinfo接口(顺便更名为IMapInfo)创建一个假的Mapinfo对象。

然后,您指示该模拟对象期望哪些调用以及返回什么结果(如果适用)。您还可以创建测试,其中模拟对象引发异常或执行其他难以使用真实对象调用的操作。

两个主要的(且免费的).NET模拟框架是MoQRhino Mocks。Rhino更加成熟,并且具有更多配置模拟对象的方法。MoQ是新手,并且具有较小的功能集和较少的设置期望方式。

就我个人而言,我认为MoQ对于模拟的新手来说更好。它相对容易理解,所有可用的文档都与当前版本相关(搜索Rhino教程,您会得到几年前不再适用的垃圾),而且性能良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接