无法在最小起订量中引发事件,当我订阅时没有任何反应

Not able raising an event in moq, nothing happens when i subscribe

我正在编写一些单元测试,并且我正在使用 Moq 框架来模拟我的一些 类。我写的代码很简单:

Mock<IApp> _iAppMock;
bool _changed;

[SetUp]
public void Setup()
{
    _iAppMock = new Mock<IApp>();
    _iAppMock.Setup(i => i.Back()).Raises(i => i.Changed += OnEventHandler);
    _changed = false;
}

private void OnEventHandler(object sender, EventArgs args)
{
    Console.WriteLine("Heeellllo");
    _changed = true;
}

[Test]
public void Test()
{
    _iAppMock.Object.Back();
    Assert.IsTrue(_changed);
}

当我运行测试时,OnEventHandler方法永远不会执行。如何使用 Moq 框架触发事件并订阅它?

Raises 方法中的代码只是告诉 mock 要引发哪个事件以及使用哪个事件参数;它实际上并没有将事件挂接到您的处理程序。改用这个:

// Set up the mock to raise the "Changed" event when Back() is called
_iAppMock.Setup(i => i.Back()).Raises(i => i.Changed += null, EventArgs.Empty);

// Attach the event handler here as normal.
_iAppMock.Object.Changed += OnEventHandler;

有关更多示例,请参阅 Events section of the Moq Quickstart

您只是将处理程序传递给 Raise 方法。 尝试将 EventArgs 作为 EventArgs.Empty 传递,例如

 _iAppMock.Setup(i => i.Back()).Raises(i => i.Changed += OnEventHandler, EventArgs.Empty);