我有一个旧的VB6项目,我试图添加单元测试.我通过嘲弄对象破坏了类中的依赖.一切都进行得很好,直到我发现一些依靠事件发生,现在我已经打了墙.
这是一个很快的例子,我正在努力做的不工作:
ITab.cls:
Option Explicit Public Event Click(tabNumber As Integer) Public Sub SomeOtherFunction() End Sub
clsRealTab.cls:
Option Explicit Implements ITab Public Event Click(tabNumber As Integer) Public Sub ITab_SomeOtherFunction() 'code here' End Sub
frmMain.frm:
Option Explicit Private WithEvents mTab as ITab Public Sub Main() Set mTab = New clsRealTab 'gives "Object or class does not support the set of events" error' End Sub
有没有人知道有没有办法做这个工作或另一种方式去处理这种情况?
我实现了一个回调接口,我称之为ITabEventsHandler.看起来像这样:
Option Explicit Public Sub Click(intPrevIoUsTab As Integer,objSSTab As Object) End Sub
然后,我将ImabeventsHandler应用到我的表单中,并将表单作为ITabEventsHandler参数传递给我的clsTab初始化程序.而不是提高自定义Click(…)事件,我可以调用mTabEventsHandler.Click(…).
感谢您的建议!
你根本不能在VB6中实现源接口.所以简短的答案是“不,你不能这样做”.你可以用直接的typelib编辑进行攻击,但是这样会很快就会变得丑陋.
如果你必须通过不同的(mock)类“实现”这些,你可以考虑你的情况下的回调接口.