Moq Verify events triggered

别等时光非礼了梦想. 提交于 2020-07-04 10:59:26

问题


class A
{
    event EventHandler Event1;
}
var mock = new Mock<A>();

How do I verify Event1 was fired? (without using manual event handlers / triggered flags)


回答1:


var mock = new Mock<IInterfaceWithEvent>();
mock.Raise(e => e.MyEvent += null, EventArgs.Empty);
mock.VerifyAll();

or if you want to make sure that act raises an event, your setup should look like:

mock.Setup(foo => foo.Submit()).Raises(f => f.Sent += null, EventArgs.Empty);
// ...
mock.VerifyAll();



回答2:


I'm not sure I really understand why you ask. If you have a Mock<A>, then you control the mock so why verify that it has done something that you control?

That said, although I do use Moq's raise/raises, I still often use a flag with a lambda, which I find fairly clean:

bool eventWasDispatched = false; // yeah, it's the default
var a = new A();
a.Event1 += () => eventWasDispatched = true;
a.DoSomethingToFireEvent();
Assert.IsTrue(eventWasDispatched);



回答3:


How about something like this?

public class MyClass : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get => _name;

        set
        {
            _name = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Name)));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

In your tests:

// This interface contains signatures which match your event delegates
public interface IPropertyChangedEventHandler
{
    void PropertyChangedHandler(object sender, PropertyChangedEventArgs e);
}

public void WhenSettingNameNotifyPropertyChangedShouldBeTriggered()
{
    // Arrange
    var sut = new Mock<MyClass>();

    var handler = new Mock<IPropertyChangedEventHandler>();
    handler.Setup(o => o.PropertyChangedHandler(sut, new PropertyChangedEventArgs(nameof(MyClass.Name))));

    sut.PropertyChanged += handlerMock.Object.PropertyChangedHandler;

    // Act
    sut.Name = "Guy Smiley";

    // Assert
    handler.Verify();
}


来源:https://stackoverflow.com/questions/6378294/moq-verify-events-triggered

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!