如何使用 COM OLE 对象进行 TDD

2024-01-03

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


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

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

两个大型(且免费).NET 模拟框架是MoQ http://code.google.com/p/moq/ and 犀牛模拟 http://ayende.com/projects/rhino-mocks.aspx。 Rhino 更加成熟,有更多配置模拟的方式。 MoQ 是新来者,与 Rhino 相比,其功能集较小,设定期望的方式也较少。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 COM OLE 对象进行 TDD 的相关文章

  • 在 Visual Basic 2010 的控件中显示 PDF

    我刚刚安装了 Visual Basic 2010 浏览了一些有关如何显示文件的教程 但找不到任何有关如何选择现有 PDF 文件并将其嵌入表单的材料 任何正确方向的建议或指示都会很棒 谢谢 只需在表单中嵌入浏览器控件并将其导航到 PDF 文件
  • 使用 C++ 进行测试驱动开发

    希望开始用 C 进行 TDD 我见过 CPPUnit 但我想知道人们是否还有其他更喜欢的选择 感谢您的建议 我可以推荐谷歌模拟 https github com google googletest 它已成为 Google Test 捆绑的一
  • MouseHover 事件中的鼠标坐标?

    我知道如何检索鼠标坐标PictureBox Click虽然事件e In a PictureBox MouseHover e不返回此类信息 如何获取鼠标坐标MouseHover事件 有办法吗 提前致谢 Control MouseHover h
  • 使用 std::unique_ptr 管理 COM 对象

    我正在尝试使用智能指针来保存我的类中的 COM 对象 同时避免使用 ComPtr 是否可以使用 unique ptr 来达到此目的 我对智能指针很陌生 到目前为止我有点困惑 请考虑以下简化代码 class Texture private s
  • 如何使用 Laravel 伪造图像上传以使用干预图像包进行测试

    我有一个测试断言图像可以上传 这是代码 Test file UploadedFile fake gt image image one jpg Storage fake public response this gt post api ima
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 在word中添加超链接,使用vb.net

    我目前正在尝试通过 VB 程序在 word 中添加一个指向 web url 的超链接 我正在跌跌撞撞地尝试找到正确的语法以及完成此任务所需的内容 因为我收到了很多无用的 VBA 示例 而这根本不是我需要的 我的代码如下所示 sPara2 o
  • 在本地安全存储用于 Web 服务的密码

    我有一个应用程序 通过发送用户名和密码来对第三方 Web 服务进行身份验证 目前 我每次启动应用程序时都会在 winform 上输入密码 但我需要它自动登录 我想比更安全地存储用户名 密码 Dim username as String us
  • C++ Microsoft:如何将 uuid/guid 与模板专业化相关联

    我想将 uuid guid 与模板专业化相关联 以下代码可用于将 uuid 与非模板接口 类 结构 关联 interface declspec uuid CECA446F 2BE6 4AAC A117 E395F27DF1F8 ITest
  • Seam 和 Mock 有什么区别?

    自从我使用 java 遗留代码以来已经有几个月了 这是我正在处理的一些事情 0 测试覆盖率 巨大的函数有时我什至看到有的代码超过300行 许多私有方法 有时还有静态方法 高度紧密耦合的代码 一开始我很困惑 我发现在遗留系统中使用TDD很难
  • VB.NET 中的“阴影”与“覆盖”

    这两个关键词有什么意义Shadows http msdn microsoft com en us library 1h3wytf6 aspx and 覆盖 http msdn microsoft com en us library k777
  • 如何在 vb.net 中使用 Stacktrace 返回错误行号

    我正在尝试创建某种错误捕获方法来返回错误行号 当进程中止时 我们会发送一封中止电子邮件 该电子邮件为我们提供了错误号 and 错误描述但我想知道实际上哪里出了错误 我知道你可以执行以下操作 1 code here 2 code here 3
  • 无法使用 dataformatstring 格式化日期时间

    由于某种原因 我无法在网格视图中格式化日期文本
  • Symfony2 功能测试会话持久性

    我正在尝试在 Symfony 中进行一些功能测试 但目前我的会话遇到了问题 我执行了一段代码 它似乎有效 但容器的会话中没有存储任何内容 我有一个表格 您可以在其中设置数据 当您提交它时 它会检查值并将其存储在会话中 然后它重定向到另一个页
  • 错误:查询值的数量和目标字段的数量不相同

    Public Class RoomInfo Dim ValTx As String Dim ValNr As Integer Private Sub cboRoomType DropDown sender As System Object
  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 如何在量角器中模拟拖放动作?

    我有一个双滑块 我想测试它是否可操作并返回正确的数据 滑块有一个最小和一个最大处理程序 它还有一些 我可以挂钩的断点 我想要模拟的是 handler max 元素的 touchStart 将拇指移动到类为 step 3 的元素上 handl
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • 某些笔记本电脑中的 VB.net Forms UI 显示问题

    我是 VB 应用程序的新手 无法弄清楚我的应用程序出了什么问题 有一个带有几个标签和文本字段的表单 当我在我和其他人的机器上运行该应用程序时 它显示良好 并具有正确的对齐和字体 然而 对于某些人来说 应用程序表单 UI 是破碎的 未对齐的文
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应

随机推荐