gpt4 book ai didi

.net - 在 dotnet 应用程序中使用 Visual Basic 6.0 中声明的事件

转载 作者:行者123 更新时间:2023-12-02 13:21:35 24 4
gpt4 key购买 nike

我们正在为用 VB 6.0 编写的 COM 库编写测试。我们面临的问题是,我们无法访问 VB 中声明的事件(withevents)。我们得到异常,“对象不支持事件集”。我们怎样才能克服这个问题呢?

最佳答案

你的模拟框架是这里的问题。此调用返回的模拟对象:

repository.DynamicMock<PersonLib.DatabaseCommand>();

实现DatabaseCommand类的接口(interface),但不模拟其事件。因此,当您将此模拟对象的实例传递给 VB6 代码(该代码期望接收可以引发事件的 DatabaseCommand 对象)时,它将不起作用。

当您将模拟对象传递给 PersonClass.Init 方法时,以下是所发生情况的简化版本:

  1. 代码到达 PersonClass.Init 中的这一行:

    设置 dbCommand = vDBCommand

  2. VB6 询问 Set 语句右侧的对象是否支持与 DatabaseCommand 类相同的事件(VB6 这样做是因为您使用 WithEvents 关键字声明了 dbCommand,因此它将尝试设置事件接收器来接收来自 dbCommand 对象的事件)。

  3. 但是,您传入的对象是一个模拟对象,而不是真正的 DatabaseCommand 对象,因此实际上并没有实现真正的 DatabaseCommand 事件类实现。当 VB6 遇到此问题时,它会引发您所看到的错误。

我想不出一种方法来使模拟对象支持与DatabaseCommand类相同的事件,以使您的测试代码正常工作(好吧,我可以想到一种方法,但是这将涉及重新设计你的类),但如果我找到更合理的解决方案,我可能会在稍后发布更多内容。

关于.net - 在 dotnet 应用程序中使用 Visual Basic 6.0 中声明的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/283202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com