2008-11-03 52 views
2

我有一个OLE COM对象,试图写一个包装,我决定开始使用TDD为它编写的代码,因为我相信它会给我一个更好的方向与我试图写的东西。 COM对象具有这样的接口:我会怎么做TDD与COM OLE对象

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

的[待办事项]命令将采取财产以后像下面

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

现在我试图写一个包装所以有这样的功能:现在

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

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

我的问题是:有没有更好的方法来做到这一切与具有每次启动OLE应用程序呢?我听说过模拟物体,但并没有真正研究它,他们会帮助我吗?如果是这样如何?

编辑:现在我已经意识到我将不得不做出一个模拟对象的Mapinfo,我的问题是我怎么做一个化妆模仿对象,可以采取不同的格式化字符串?这将如何帮助我验证包装器中的代码是否正确?

回答

3

是,模拟对象会有所帮助。从本质上讲,您通过嘲讽MapInfo的接口一个假的Mapinfo对象(你应该重命名IMapInfo,顺便说一句)。

然后,您会指示该模拟调用期望的内容以及返回的结果(如果适用)。在模拟抛出异常或执行其他任务,是很难用实物来调用您还可以创建测试。

两大(和免费的).NET嘲讽框架是MoQRhino Mocks。犀牛更成熟,并有更多的配置模拟方式。 MoQ是新手,与Rhino相比,它具有更小的特征和更少的设置期望的方式。

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