我如何使用COM OLE对象进行TDD

时间:2008-11-03 13:33:34

标签: vb.net testing com tdd ole

我有一个尝试编写包装器的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 个答案:

答案 0 :(得分:3)

是的,模拟对象会有所帮助。基本上,你通过模拟Mapinfo接口创建一个假的Mapinfo对象(你应该重命名那个IMapInfo,顺便说一下。)

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

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

就我个人而言,我认为MoQ更适合新手嘲笑。它相对容易理解,那里的所有文档都与当前版本相关(搜索Rhino教程并且你从几年前就不再适用了垃圾),并且它表现良好。