Как утверждать, что событие было подписано с помощью FakeItEasy? - PullRequest
7 голосов
/ 21 декабря 2011

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

Спасибо!

Ответы [ 2 ]

10 голосов
/ 23 декабря 2011

Я согласен с комментарием, в котором предлагается, чтобы вы просто подняли событие и убедились, что обработчик, на который вы хотите подписаться, был вызван. Но есть способ проверить, был ли прикреплен обработчик, хотя и не очень красиво:

public interface IHaveAnEvent
{
    event EventHandler MyEvent;
}

// In your test...
var fake = A.Fake<IHaveAnEvent>();

var handler = new EventHandler((s, e) => { });

fake.MyEvent += handler;

A.CallTo(fake).Where(x => x.Method.Name.Equals("add_MyEvent")).WhenArgumentsMatch(x => x.Get<EventHandler>(0).Equals(handler)).MustHaveHappened();

Если вы просто хотите проверить, был ли подключен какой-либо обработчик, вы можете пропустить часть «WhenArgumentsMatch».

0 голосов
/ 21 декабря 2011

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

...