I have a presenter class, that attaches an event of the injected view. Now I would like to test the presenter reacting on correctly on the event.
This is the view in
Don't you need to pass the argument? Your event signature is EventHandler, which is
(object sender, EventArgs e).
this.mockView.Raise(mock => mock.MyEvent += null, new EventArgs());
I've never used the overload you've specified here... it doesn't seem correct, though.
You've declared UpdateView() as accepting a string, but your presenter invocation does not have a string argument (or default):
Invocation:
private void OnMyEvent(Object sender, EventArgs e)
{
this._view.UpdateView();
}
Declaration:
public void UpdateView(string test)
{
this.textBox.Text = test;
}
Verification:
mockView.Verify(mock => mock.UpdateView(It.IsAny<string>());
FWIW, I think the event in your view is a bit cumbersome, a simple change would be to:
public interface IView
{
void UpdateText(string test);
}
public class MyPresenter
{
private readonly IView _view;
public MyPresenter(IView view)
{
_view = view;
}
private void SelectItem(string item)
{
_view.UpdateText(item);
}
}
public partial class MyView : IView
{
private readonly MyPresenter _presenter;
public MyView()
{
_presenter = new MyPresenter(this);
combo.SelectedIndexChanged += OnSelectedIndexChanged;
}
public void UpdateText(string test)
{
textBox.Text = test;
}
private OnSelectedIndexChanged(Object sender, EventArgs e)
{
_presenter.SelectItem(combo.SelectedItem);
}
}
Then you could just verify the interaction with the view without having an additional event to deal with:
presenter.SelectItem("Burrito!");
mockView.Verify(mock => mock.UpdateView("Burrito!");