c# - una - Probando que un evento tenga asignado un Manejador de eventos
no se puede agregar el controlador de eventos visual studio (4)
Estoy queriendo probar que una clase tiene un EventHandler asignado a un evento. Básicamente estoy usando mi IoC Container para conectar EventHandlers para mí, y quiero verificar que se hayan asignado correctamente. Entonces, realmente estoy probando mi configuración de IoC.
[Test]
public void create_person_event_handler_is_hooked_up_by_windsor()
{
IChangePersonService changePersonService = IoC.Resolve<IChangePersonService>();
// check that changePersonService.PersonCreated has a handler attached
}
No estoy seguro de cómo probar que changePersonService.PersonCreated tiene algo adjunto.
¿Algunas ideas?
Gracias.
En realidad no se trata de pruebas unitarias, es una prueba de integración. Y no estoy probando Castle Windsor, sino mi configuración. Estoy probando que todas mis clases desacopladas están siendo conectadas como me propongo.
En última instancia, quiero probar que mi configuración está enganchando los eventos correctamente como quiero, pero no estoy seguro de que C # me lo permita sin cambiar mi API como dice Yuval.
Me parece que estás intentando probar la unidad de Castle Windsor. Como probablemente ya tenga pruebas unitarias, creo que esto es una pérdida de esfuerzo. Sería mejor probar que su objeto plantea los eventos apropiados en los momentos correctos (probablemente registrando un objeto simulado como controlador de eventos).
Parece que estás tratando de extraer información de tu objeto para afirmar que es una cosa u otra. Tenga en cuenta que esto no es necesariamente una prueba unitaria, porque no está probando la funcionalidad.
Si debe probar esto, parece que tendrá que abrir una API pública en IChangePersonService
para obtener los controladores de eventos registrados.
Sin cuestionar lo que pretende con esto, la única forma de probar y enumerar los eventos registrados es si los registra en su propia colección.
Mira este ejemplo:
public class MyChangePersonService : IChangePersonService
{
private IList<EventHandler> handlers;
private EventHandler _personEvent;
public event EventHandler PersonCreated
{
add
{
_personEvent += value;
handlers.Add(value);
}
remove
{
_personEvent -= value;
handlers.Remove(value);
}
}
public IList<EventHandler> PersonEventHandlers { get { return handlers; } }
public MyChangePersonService()
{
handlers = new List<EventHandler>();
}
public void FirePersonEvent()
{
_personEvent(this, null);
}
}
A continuación, puede acceder a los controladores registrados con Prop PersonEventHandlers
.
¿Puedes implementar algo como esto?