c# - Moq - mock.Raise 应该在没有设置的情况下在测试单元中引发事件

标签 c# events tdd moq mvp

我有一个演示器类,它附加了一个注入(inject) View 的事件。 现在我想测试演示者对事件的正确 react 。

这是 View 界面IView:

public interface IView 
{
    event EventHandler MyEvent;
    void UpdateView(string test);
}

这是实现 IView 的 View :

public partial class MyView : IView
{
    public event EventHandler MyEvent;

    public MyView()
    {
        this.combo.SelectedIndexChanged += this.OnSelectedIndexChanged;
    }

    public void UpdateView(string test)
    {
        this.textBox.Text = test;
    }

    private OnSelectedIndexChanged(Object sender, EventArgs e)
    {
        if (this.MyEvent != null)
        {
            this.MyEvent(sender, e);
        }
    }
}

这是被测演示者:

public class MyPresenter
{
    private IView _view;
    public MyPresenter(IView view)
    {
        this._view = view;
        this._view.MyEvent += this.OnMyEvent;
    }

    private void OnMyEvent(Object sender, EventArgs e)
    {
        this._view.UpdateView();
    }
}

这是测试夹具测试MyPresenter:

[TestClass]
public class MyPresenterFixture()
{
    private MyPresenter testee;
    private Mock<IView> mockView;

    [TestMethod]
    public void ShouldReactOnMyEvent()
    {
        // arrange
        this.mockView = new Mock<IView>(MockBehavior.Strict);
        this.testee = new MyPresenter(this.mockView.Object);

        // act
        this.mockView.Raise(mock => mock.MyEvent += null); // this does not fire

        // assert and verify
        this.mockView.Verify(mock => mock.UpdateView(It.IsAny<string>());
    }
}

我正在使用 Moq 4。是否可以做我想做的事?

最佳答案

不需要传参吗?你的事件签名是EventHandler,也就是
(object sender, EventArgs e).

this.mockView.Raise(mock => mock.MyEvent += null, new EventArgs());

我从未使用过您在此处指定的重载...不过它似乎不正确。

关于c# - Moq - mock.Raise 应该在没有设置的情况下在测试单元中引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6016854/

相关文章:

c++ - 如何在控制反转中创建类构造函数所需的对象?

javascript - react 事件行为

javascript - 当 'blur' 事件发生时,我如何找出哪个元素焦点*到*了?

unit-testing - 从测试覆盖中排除代码

c# - 使抽象类不可见;或 : hiding my BananaHuman

javascript - IE8事件坐标

javascript - Javascript 中 Singleton 对象的窗口示例?

c# - 大多数人如何在 .NET Web 应用程序中编写后台任务?

c# - 处理动画工具数据存储的最有效/最快速的方法

c# - 使用 C# 获取和设置 udp 包标志和校验和