gpt4 book ai didi

c# - RhinoMocks - 在模拟抽象类上引发事件失败

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:37 27 4
gpt4 key购买 nike

有谁知道如何在抽象类上引发事件?

下面的测试在最后一行失败了。我得到的异常如下:

System.InvalidOperationException : Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method).

我能够在接口(interface)上引发事件,但不能在实现该接口(interface)的抽象类上引发事件。这是使用最新版本的 RhinoMocks (3.6.0.0)。

谢谢,亚历克斯

    public abstract class SomeClass : SomeInterface
{
public event EventHandler SomeEvent;
}

public interface SomeInterface
{
event EventHandler SomeEvent;
}

[Test]
public void Test_raising_event()
{
var someClass = MockRepository.GenerateMock<SomeClass>();
var someInterface = MockRepository.GenerateMock<SomeInterface>();

someInterface.Raise(x => x.SomeEvent += null, someClass, EventArgs.Empty);
someClass.Raise(x => x.SomeEvent += null, someClass, EventArgs.Empty);
}

最佳答案

问题由异常消息解释:

System.InvalidOperationException : Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method).

您的事件不是虚拟的,即。 Rhino 将无法覆盖它。只需添加 virtual抽象类事件定义的关键字。

位背景信息。当您调用 MocksRepository.GenerateMock<SomeClass> Rhino 将创建动态代理 类,它将用于记录调用、准备 stub 等。这个类可能看起来 +/- 像这样:

public class SomeClassDynamicProxy1 : SomeClass
{
public override EventHandler SomeEvent
{
add { ... }
remove { ... }
}

...
}

没有virtual在你的SomeClass ,这段代码自然会像现在这样失败。

关于c# - RhinoMocks - 在模拟抽象类上引发事件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795770/

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