Sto provando ad attivare il gestore di eventi assegnato al mio timer di simulazione. Come posso testare questo metodo privato qui?Come posso eseguire il gestore eventi assegnato a un mock?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
La classe client assegna un gestore di eventi a questo oggetto. Voglio testare la logica in questa classe.
_timer.Elapsed += ResetExpiredCounters;
E il metodo assegnato è privato
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
voglio avere questo gestore di eventi nella mia finta ed eseguirlo in qualche modo. Come posso fare questo?
Aggiornamento:
ho capito che stava sollevando l'evento prima che ho assegnato il gestore di eventi. Ho corretto questo, ma ho ancora ottenere questo errore:
alzo in questo modo:
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
o
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
Entrambi non funzionerà.
Aggiornamento:
Ecco la cosa che ha funzionato per me. Nota che non è utile se stai cercando di passare informazioni al gestore di eventi come Jon ha sottolineato nei commenti. Lo sto solo usando per deridere il wrapper per la classe System.Timers.Timer.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
Alla fine, questo non aiuterà affatto se avete bisogno di usare argomenti dell'evento dal momento che sarà sempre nullo. Tuttavia, è l'unico modo poiché ElapsedEventArgs ha solo un costruttore interno.
"oggetto di tipo 'System.EventArgs' non può essere convertito in "System.Timers.ElapsedEventArgs" "- Quale parte non è chiara? – Groo
Ancora ottengo quell'errore anche se passo ElapsedEventArgs. Come posso sollevare quell'evento? –
È 'ElapsedEventHandler' nell'interfaccia' ITimer' in realtà 'System.Timers.ElapsedEventHandler'? – Groo