タイマー クラスを作成していますが、テスト パスを作成できません。タイマーの時間が経過したときにメソッドが呼び出されることをテストしたいと思います。
私は次のクラスを持っています:
public class TimeOutTimer
{
private readonly ISubscriber _subscriber;
private Timer _timer;
public TimeOutTimer(ISubscriber subscriber)
{
_subscriber = subscriber;
}
public void Start()
{
_timer = new Timer(1000);
_timer.Start();
_timer.Elapsed += TimerOnElapsed;
}
private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
{
_subscriber.TimeReached();
}
}
そして、Moq を使用したテスト:
[Test]
public void Start_WithValidParameters_TriggersTimeReached()
{
var subscriberMock = new Mock<ISubscriber>();
var timer = new TimeOutTimer(subscriberMock.Object);
timer.Start();
subscriberMock.Verify(subscriber => subscriber.TimeReached());
}
タイマーを取り出して _subscriber.TimeReached() を直接呼び出すと、機能します。
私は何か間違ったことをしていますか?