Moq Verify события вызвали - PullRequest
14 голосов
/ 17 июня 2011
class A
{
    event EventHandler Event1;
}
var mock = new Mock<A>();

Как проверить, что Event1 был запущен? (без использования ручных обработчиков событий / сработавших флагов)

Ответы [ 3 ]

22 голосов
/ 17 июня 2011
var mock = new Mock<IInterfaceWithEvent>();
mock.Raise(e => e.MyEvent += null, EventArgs.Empty);
mock.VerifyAll();

или если вы хотите убедиться, что действие вызывает событие, ваша установка должна выглядеть следующим образом:

mock.Setup(foo => foo.Submit()).Raises(f => f.Sent += null, EventArgs.Empty);
// ...
mock.VerifyAll();
21 голосов
/ 17 июня 2011

Я не уверен, что я действительно понимаю, почему вы спрашиваете. Если у вас есть Mock<A>, то вы контролируете макет, так зачем проверять, что он сделал то, что вы контролируете?

Тем не менее, хотя я и использую рейз / рейзы Moq, я все еще часто использую флаг с лямбдой, который я считаю довольно чистым:

bool eventWasDispatched = false; // yeah, it's the default
var a = new A();
a.Event1 += () => eventWasDispatched = true;
a.DoSomethingToFireEvent();
Assert.IsTrue(eventWasDispatched);
0 голосов
/ 03 октября 2018

Как насчет этого?

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;
}

В ваших тестах:

// 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...