我正在寫一個客戶端,它每秒發送一個「心跳信號」給服務器。客戶端在後臺線程中調用WCF服務來報告其活動。如何測試心跳模式?
如何對此進行單元測試?我是否需要等待幾秒鐘,並檢查是否多次調用適當的方法?
它應該是某種場景測試嗎?也許我不應該擔心在整個客戶生命週期中不斷調用服務?
我可以測試單個呼叫到WCF服務,但它不測試「心跳模式」。
我正在使用TDD方法。 (C#,NUnit,Moq)
任何建議或例子?
編輯:
我認爲這是不夠清晰。
這是什麼,我有一個更簡單的版本:
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));
}
我有兩個問題:
1)爲什麼我的測試總是失敗?我做錯了什麼?
2)我應該測試它嗎?
非常感謝。我不在乎WCF服務是否正在接收消息。我需要測試的是我的客戶端每秒發送消息而不會收到任何錯誤的能力。我使用模擬服務測試了對WCF服務的「手動」調用,但這並不是我想要實現的。方法「SendHeartbeat」應該是私有的,應該在TimerElapsed中調用。 – Novitzky