如何对心跳模式进行单元测试?

Nov*_*zky 3 .net c# nunit unit-testing

我正在编写一个客户端,每秒向服务器发送一个"心跳信号".客户端在后台线程中调用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();
   }
}
Run Code Online (Sandbox Code Playgroud)

......这是我的考验:

[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));
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:
1)为什么我的测试总是失败?我做错了什么?
2)我应该测试一下吗?

eul*_*rfx 5

必须首先隔离要测试的功能.例如,在这种情况下,可以测试两个方面.一个是listenbeat组件实际上在指定的时间表上发送心跳消息.另一个是服务接收消息.如果您抽象服务,那么您可以独立于服务实现测试听力组件.这可以在单元测试中通过启动听力组件然后休眠,然后验证存根或模拟服务实现接收到预期数量的消息来完成.确保服务正在接收消息的测试是集成测试,因此不是"纯"单元测试.但是,由于必须进行测试,因此您也可以使用测试用例.