타이머 모의 작업에 할당 된 이벤트 처리기를 시작하려고합니다. 이 비공개 방법을 여기서 어떻게 테스트 할 수 있습니까?모의 객체에 할당 된 이벤트 핸들러를 어떻게 실행할 수 있습니까?
public interface ITimer
{
void Start();
double Interval { get; set; }
event ElapsedEventHandler Elapsed;
}
클라이언트 클래스는이 개체에 이벤트 처리기를 할당합니다. 이 수업에서 논리를 테스트하고 싶습니다.
_timer.Elapsed += ResetExpiredCounters;
그리고 할당 방법은
private void ResetExpiredCounters(object sender, ElapsedEventArgs e)
{
// do something
}
개인이다 나는 나의 모의에서이 이벤트 핸들러가 어떻게 든 그것을 실행하려는. 어떻게해야합니까?
업데이트 :
가 나는 이벤트 핸들러를 할당하기 전에이 이벤트를 발생 깨달았다. 나는 그것을 수정하지만, 난 여전히이 오류를 얻을 :
내가 이런 식으로 인상 :
_timer.Raise(item => item.Elapsed += null, ElapsedEventArgs.Empty);
또는
_timer.Raise(item => item.Elapsed += null, EventArgs.Empty);
가 모두 작동하지 않습니다를.
는 업데이트 :
여기에 나를 위해 일한 것입니다. Jon이 주석에서 지적한 것처럼 이벤트 처리기에 정보를 전달하려는 경우 유용하지 않습니다. 난 그냥 System.Timers.Timer 클래스에 대한 래퍼를 조롱하는 데 사용하고 있습니다.
_timer.Raise(item => item.Elapsed += null, new EventArgs() as ElapsedEventArgs);
결국 항상 null이 될 수 있으므로 이벤트 인수를 사용해야하는 경우에는 결국 도움이되지 않습니다. 그러나 ElapsedEventArgs에는 내부 생성자 만 있기 때문에이 방법이 유일한 방법입니다.
"타입의 객체의 경우 System.EventArgs '원래 ElapsedEventHandler 대리자를 할 수 계속 사용할 수 있습니다이 방법 : – Groo
ElapsedEventArgs를 전달하더라도 여전히 오류가 발생합니다. 어떻게 그 사건을 제기 할 수 있습니까? –
'ITimer' 인터페이스의'ElapsedEventHandler'는 실제로'System.Timers.ElapsedEventHandler'입니까? – Groo