加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:41:35 所属栏目:百科 来源:网络整理
导读:我正在编写一个客户端,每秒向服务器发送一个“心跳信号”.客户端在后台线程中调用WCF服务以报告其活动. 如何对此进行单元测试?我是否需要等待几秒钟并检查是否多次调用了适当的方法? 它应该是某种情景测试吗?也许我不应该担心在整个客户的整个生命周期中
我正在编写一个客户端,每秒向服务器发送一个“心跳信号”.客户端在后台线程中调用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)我应该测试一下吗?

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读