Moq - mock.Raise应该在没有安装程序的情况下在测试单元中引发事件

Yan*_*nik 33 c# tdd moq

我有一个演示者类,它附加了注入视图的事件.现在我想测试演示者对事件的正确反应.

这是视图界面IView:

public interface IView 
{
    event EventHandler MyEvent;
    void UpdateView(string test);
}
Run Code Online (Sandbox Code Playgroud)

这是实现IView的视图

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是受测试的主持人:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是测试夹具测试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>());
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Moq 4.我可以做我想做的事吗?

最好的问候Yannik

And*_*mes 63

你不需要通过论证吗?您的事件签名是EvenHandler,即
(object sender, EventArgs e).

this.mockView.Raise(mock => mock.MyEvent += null, new EventArgs());
Run Code Online (Sandbox Code Playgroud)

我从来没有使用过你在这里指定的超载......但这似乎不正确.

  • +1.或者传递EventArgs.Empty.您需要将除发件人之外的任何参数作为参数传递给Mock.Raise.链接http://madcoderspeak.blogspot.com/2010/01/meet-frameworks-rhino-v-moq-v-jmock.html#scen8 http://code.google.com/p/moq/wiki/QuickStart (2认同)