对VBScript进行模拟的C#单元测试 [英] C# unit test with mocking for VBScript

查看:109
本文介绍了对VBScript进行模拟的C#单元测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have made changes to a VBScript (.vbs) that needs testing.

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

These are some VB6 classes defined in .cls files. The VBScript requires the objects of these classes.

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

My changes are limited to only one function in the VBScript that requires an object for just one of the classes.

我想避免运行整个脚本并初始化所有对象.

I want to avoid having to run the entire script and initiate all the objects.

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

Is there any way, I can write unit tests to test my part of the script and mock the object that I need to pass?

推荐答案

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

This is how I am using C# unit tests to mock VB6 COM classes using RhinoMocks:

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

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

Note: I am new to COM :) So if you are an experienced COM user, please feel free to edit my answer for corrections or providing more details, links, etc.

这篇关于对VBScript进行模拟的C#单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆