Próbuję uruchomić procedurę obsługi zdarzeń przypisaną do mojego symulatora zegarowego. Jak mogę przetestować tę prywatną metodę tutaj?Jak uruchomić procedurę obsługi zdarzeń przypisaną do próby?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
Klasy klienta przypisuje obiekt obsługi zdarzeń do tego obiektu. Chcę przetestować logikę w tej klasie.
_timer.Elapsed += ResetExpiredCounters;
I przypisana metoda jest prywatny
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
Chcę mieć ten obsługi zdarzeń w moim mock i uruchomić go jakoś. Jak mogę to zrobić?
Aktualizacja:
zdałem sobie sprawę, podnoszenie zdarzenie zanim przypisane obsługi zdarzeń. Poprawiłem to, ale ja wciąż dostać ten błąd:
wzniosę ją tak:
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
lub
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
Obie nie będzie działać.
Aktualizacja:
Oto rzeczy, że pracował dla mnie. Zauważ, że nie jest to przydatne, jeśli próbujesz przekazać informacje do obsługi zdarzeń, jak Jon wskazał w komentarzach. Używam go tylko do kpiny z wrappera dla klasy System.Timers.Timer.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
W ostatecznym rozrachunku nie pomoże to wcale, jeśli trzeba użyć argumentów zdarzeń, ponieważ zawsze będzie to wartość NULL. Jednak jest to jedyny sposób, ponieważ ElapsedEventArgs ma tylko wewnętrzny konstruktor.
„Obiekt typu«System.EventArgs»nie może przekonwertować , aby wpisać "System.Timers.ElapsedEventArgs" "- Jaka część jest niejasna? – Groo
Nadal dostaję ten błąd, nawet jeśli przekażę ElapsedEventArgs. Jak mogę podnieść to wydarzenie? –
Czy "ElapsedEventHandler" w interfejsie 'ITimer' naprawdę' System.Timers.ElapsedEventHandler'? – Groo