【发布时间】:2012-05-29 08:40:57
【问题描述】:
有人知道我如何在抽象类上引发事件吗?
下面的测试在最后一行失败。我得到的异常如下:
System.InvalidOperationException : 无效调用,已使用最后一次调用或未进行调用(确保您正在调用虚拟 (C#) / 可覆盖 (VB) 方法)。
我可以在接口上引发事件,但不能在实现该接口的抽象类上引发。这是使用最新版本的 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);
}
【问题讨论】:
-
您到底想进行什么单元测试?您能否提供您要测试的实际代码?
-
Darin - 我没有提供实际的测试代码,因为它会让人很难只见树木不见森林。但是,对于一些上下文,测试目标是一个适配器类,它在其构造函数中采用“SomeClass”并实现另一个接口。我需要测试当传递的“SomeClass”引发一个事件时,适配器类会引发它自己的不同事件。适配器类没有在上面的案例中显示,以便专注于这个问题,即我似乎无法在模拟的抽象类上引发事件。
标签: c# unit-testing rhino-mocks