Tenemos un componente COM hecho en casa escrito en C++. Ahora queremos probar sus funciones y eventos en un proyecto de prueba de C#. Las pruebas de función son bastante sencillas. Sin embargo, los eventos nunca se desencadenan.Unidad de prueba de eventos COM?
MyLib.MyClass m = new MyLib.MyClass();
Assert.IsTrue(m.doStuff()); // Works
// This does not work. OnMyEvent is never called!
m.MyEvent += new MyLib.IMyClassEvents_MyEventHandler(OnMyEvent);
m.triggerEvent();
He buscado en Google esto y he leído sobre problemas similares aquí en StackOverflow. ¡He intentado todos los métodos propuestos pero no puedo hacerlo funcionar!
Hasta ahora he intentado ejecutar mi prueba con un active dispatcher pero sin éxito. También probé manualmente el bombeo de mensajes en el hilo principal usando Dispatcher.PushFrame()
. Nada. Mis eventos nunca se disparan. Creé un proyecto simple de WinForms y verifiqué que mis eventos funcionan en una configuración normal. Por lo tanto, este problema solo se aplica a las pruebas unitarias.
P: ¿Cómo realizo una prueba de unidad C# normal que puede desencadenar con éxito controladores de eventos activos?
¡Alguien por ahí debería tener una muestra de trabajo! Por favor ayuda.
Bien, la prueba de unidad falló. Los servidores COM tienden a necesitar el programa para bombear un ciclo de mensajes antes de que puedan generar eventos. Es parte del contrato de STA. Póngase en contacto con el autor del componente para obtener asistencia. –
El servidor COM es nuestro propio componente, que queremos probar. Los mensajes de bombeo serán, como dices, esenciales. Entonces la pregunta permanece; ¿Cómo se logra esto en una prueba unitaria? – l33t
@NOPslider ¿Qué marco de prueba unitario estás usando? Las versiones posteriores de NUnit se ajustan por defecto a un modelo de subprocesamiento MTA. – vcsjones