【问题标题】:C# unit test with mocking for VBScriptC# 单元测试与 VBScript 的模拟
【发布时间】:2016-03-14 07:06:04
【问题描述】:

我对需要测试的 VBScript (.vbs) 进行了更改。

这些是在.cls 文件中定义的一些VB6 类。 VBScript 需要这些类的对象。

我的更改仅限于 VBScript 中的一个函数,该函数只需要一个类的对象。

我想避免运行整个脚本并启动所有对象。

有什么办法,我可以编写单元测试来测试我的脚本部分并模拟我需要通过的对象吗?

【问题讨论】:

  • 通常 VBScript 文件是 .vbs 扩展名,你确定这是 VBScript 而不是 VB.Net (确实使用 .vb 扩展名)
  • 所以 VBScript 调用了一个 COM 公开的 .Net 程序集?您至少可以在 VBScript 文件中显示CreateObject("...") 的一些代码,并且可能是一些 VB.Net 类代码吗?
  • 更新了我的问题。 VBScript 作用于 VB6 类的对象

标签: c# unit-testing vbscript mocking


【解决方案1】:

这就是我使用 C# 单元测试使用 RhinoMocks 模拟 VB6 COM 类的方式:

  1. 使用 regsvr32 在我的机器上注册了 COM 组件 (ABC.dll)。这还要求我注册 VB6 类使用的所有类型和程序集。
  2. 然后我通过 Add Reference > COM > ABC 添加了对 COM 组件 (ABC) 的引用
  3. 我使用的是 .Net 4.5.1 Framework,当我添加对 COM 组件的引用时,它会为我创建一个互操作程序集 (Interop.ABC.dll)
  4. 右键单击 dll 的属性并确保 Embed Interop Types 设置为 True。这允许将 COM 接口中的所有未知数据类型公开为动态的。这还允许您使用互操作库,而无需在您的计算机上注册其中的类型。
  5. 我现在可以使用模拟框架通过互操作库公开的 COM 接口。我开始使用 NSubstitute。但是,由于我将嵌入互操作类型设置为 true,因此我公开的大多数接口属性都是动态类型(与对象相反)。 NSubstitute 不支持模拟动态获取属性(虽然我能够模拟动态集属性)。因此,我正在使用 RhinoMocks。
  6. 我正在使用 Microsoft Script Control 库来加载脚本并运行其中的方法以进行单元测试

注意:我是 COM 新手 :) 因此,如果您是经验丰富的 COM 用户,请随时编辑我的答案以进行更正或提供更多详细信息、链接等。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多