私は毎秒サーバーに "ハートビート信号"を送るクライアントを書いています。クライアントは、バックグラウンドスレッドでWCFサービスを呼び出して、そのアクティビティを報告します。ハートビートパターンをユニットテストするには?
ユニットテスト方法は?数秒待ってから、適切なメソッドが何回か呼び出されたかどうかを確認する必要がありますか?
シナリオテストの代わりにする必要がありますか?たぶん、クライアントのライフサイクル全体を通してサービスを継続的に呼び出すことについて心配する必要はありませんか?
WCFサービスへの1回の呼び出しをテストできますが、 "ハートビートパターン"はテストされません。
私はTDDアプローチを使用しています。 (C#、NUnit、Moq)
提案や例はありますか?
EDIT:
私はそれが十分明確ではなかったと思います。
これは私が持っているものの非常に簡単なバージョンです:
public class FeedService
{
private Timer t;
public FeedService()
{
t.Interval = 1000;
t.Elapsed += TimerElapsed;
t.Start();
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
t.Stop();
SendHeartbeat();
t.Start();
}
}
...これは私のテストで:
[Test]
public void Heartbeat_called_twice_after_2_seconds()
{
var mockFeedService = new Mock<FeedService>();
Thread.Sleep(2000);
mockFeedService.Verify(x => x.SendHeartBeat(), Times.AtLeast(2));
}
私は2つの質問があります。
1)なぜテストは常に失敗しますか?私が間違っていることは何ですか?
2)私はそれをまったくテストすべきですか?
ありがとうございました。 WCFサービスがメッセージを受け取っているかどうかは気にしません。私がテストする必要があるのは、エラーを返さずに毎秒メッセージを送信するクライアントの能力です。私は模擬サービスを使ってWCFサービスへの「マニュアル」呼び出しをテストしましたが、これは私が達成しようとしているものではありません。メソッド "SendHeartbeat"はプライベートでなければならず、TimerElapsedで呼び出される必要があります。 – Novitzky