Как поднять событие в MSTest? - PullRequest
1 голос
/ 09 апреля 2020

Я пишу тест, чтобы проверить, правильно ли реагирует мой класс на событие (и учтите, я только что начал TDD, так что терпите меня).

Класс, который я хочу протестировать против регистров обработчик события:

class MyClass {
       public MyClass(INotifyPropertyChanged propertyChanged) {
            propertyChanged.PropertyChanged += MyHandler;
       }
}

и мой тест выглядит примерно так (вот где я застрял):

[TestMethod]
public void MyClass_ShouldHandleEventCorrectly() {
    // Arrange
    MyClass myClass = new MyClass();

    // Act (this obviously doesn't work ....)
    myClass.PropertyChanged.Invoke()

    // Assert
}

1 Ответ

0 голосов
/ 09 апреля 2020

Я ошибся в том, кто должен реализовать INotifyPropertyChanged. Оказывается, не получатель события должен это реализовать, а отправитель события. Не желая создавать экземпляр этого (потому что тогда я бы протестировал два класса в одном тесте, который, я думаю, не то, что вам нужно), я использовал NSubstitute, чтобы высмеивать его, и их документация показала мне, как повысить событие:

// Arrange
INotifyPropertyChanged notifyPropertyChanged = Substitute.For<INotifyPropertyChanged>();
MyClass myClass = new MyClass(notifyPropertyChanged);

// Act
notifyPropertyChanged += Raise.Event<PropertyChangedEventHandler>(notifyPropertyChanged, new PropertyChangedEventHandlerArgs("property"));

// Assert
... check whatever needed in myClass
...