无法在最小起订量中引发事件,当我订阅时没有任何反应
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);
我正在编写一些单元测试,并且我正在使用 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);