Abbiamo un componente COM fatto in casa scritto in C++. Ora vogliamo testare le sue funzioni ed eventi in un progetto di test C#. I test di funzionalità sono piuttosto semplici. Tuttavia, gli eventi non vengono mai attivati.Unità test degli eventi 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();
Ho cercato su Google e ho letto su problemi simili qui su StackOverflow. Ho provato tutti i metodi proposti ma non riesco a farlo funzionare!
Finora ho provato a eseguire il test con un active dispatcher ma senza successo. Ho anche provato a pompare manualmente i messaggi nel thread principale usando Dispatcher.PushFrame()
. Niente. I miei eventi non si innescano mai. Ho creato un semplice progetto WinForms e verificato che i miei eventi funzionassero in una normale configurazione. Quindi, questo problema si applica solo ai Test unitari.
Q: Come si effettua un normale test dell'unità C# che può attivare correttamente gestori di eventi attivi?
Qualcuno là fuori dovrebbe avere un campione funzionante! Per favore aiuto.
Bene, il test dell'unità non è riuscito. I server COM tendono a richiedere al programma di pompare un loop di messaggi prima che possano generare eventi. Fa parte del contratto STA. Contattare l'autore del componente per il supporto. –
Il server COM è il nostro componente, che vogliamo testare. I messaggi di pompaggio saranno, come dici tu, essenziali. Quindi la domanda rimane; come si ottiene questo risultato in un test unitario? – l33t
@NOPslider Quale framework di test delle unità stai usando? Versioni successive di NUnit predefinite su un modello di threading MTA. – vcsjones