Есть ли способ поставить утверждение на событие? - PullRequest
1 голос
/ 10 ноября 2009

Могу ли я проверить утверждение о том, что событие было запущено? Примерно так:

[TestMethod]
public void EventFiresWhenChangingProperty()
{
    var sut = new SystemUnderTest();
    var eventRegister = new EventRegister(sut.PropertyChanged);
    sut.AnyProperty = "new value";
    Assert.EventWasFired(eventRegister);
}

Конечно, я мог бы создать обработчик событий, который поместил бы некоторую запись в контекст теста или в переменную экземпляра, которая читается только этим конкретным тестом, но это кажется слишком сложным. Я ищу что-то вроде кода выше.

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

Я обычно подключаю анонимный метод в качестве прослушивателя событий и устанавливаю в нем проверяемое значение, например:

var sut = new SystemUnderTest();
bool eventWasRaised = false;
sut.PropertyChanged += (s, e) => eventWasRaised = true;    
sut.AnyProperty = "new value";
Assert.IsTrue(eventWasRaised);

Это дает минимальное количество сантехники. Если вы хотите добавить некоторую очистку, вы можете создать переменную, содержащую обработчик события:

var sut = new SystemUnderTest();
bool eventWasRaised = false;
EventHandler eh = (s, e) => eventWasRaised = true;
sut.PropertyChanged += eh;  // attach event handler
sut.AnyProperty = "new value";
Assert.IsTrue(eventWasRaised);
sut.PropertyChanged -= eh;  // detach event handler
0 голосов
/ 10 ноября 2009

Я согласен с решением Фредрика Мёрка и использую его довольно часто. Одно замечание: лучше всего вставлять Sleep по крайней мере через 20-30 миллисекунд после запускающего действия, чтобы обеспечить достаточно времени для включения обработчика события - иногда у меня возникали условия гонки.

0 голосов
/ 10 ноября 2009

Хотя поначалу кажется, что «ненужный слесарный» код, добавление слушателя к событию, на самом деле хорошая идея, и я думаю, вы должны сделать это, чтобы протестировать событие.

Существуют некоторые фреймворки, которые позволяют вам делать то, что вы хотите, но это добавляет дополнительные зависимости к вашему коду.

Будьте проще - подпишитесь на событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...