2011-12-21 12 views
7

Tengo una clase falsa que contiene un evento. Mi código debe suscribirse a ese evento y quiero probarlo. Estoy usando FakeItEasy con NUnit y estoy buscando una manera de verificar que mi código realmente se suscriba a ese evento.Cómo afirmar que un evento se ha suscrito a con FakeItEasy?

Gracias!

+3

Solo una sugerencia: en lugar de probar que su código se suscribe al evento, simplemente compruebe que cuando recibe dicho evento realmente hace algo. De esta forma, puede realizar una prueba como "Cuando se produce un evento, se llama a Foo", que describe lo que debería suceder. –

Respuesta

10

Estoy de acuerdo con el comentario que sugiere que prefiera solo plantear el evento y verificar que se haya invocado el controlador que desea suscribir. Pero hay una manera de comprobar wether un controlador se adjunta, no pensaba muy bonita:

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(); 

Si lo que desea es necesario comprobar que los manejador se adjunta se puede omitir la parte "WhenArgumentsMatch".

0

Lo máximo que puede hacer es comprobar si el evento es nulo, le devolverá si algo está suscrito o no.
De lo contrario, no puede saber qué o cuántos controladores están suscritos a un evento.

Cuestiones relacionadas