控制QTimer的时间?

时间:2016-11-03 12:44:57

标签: c++ qt testing time

我考虑使用C ++和Qt重写一些现有的C代码。在C代码中,poll用于检查来自多个源的输入,并且每个源都有一个超时值和一些与之相关的特定行为。例如

  • intput0沉默5分钟后,我们认为对方已经死了,我们试图重新建立联系
  • 我们希望客户能够连接到socket0
  • 一旦客户端已连接到socket0,就会调用acceptsocket1),客户会在socket1关闭之前获得一分钟的请求

通过使用LD_PRELOAD和"隐藏"这种事情并不是太难测试。所涉及的系统功能(pollgettimeofday)可以(有些)轻松控制时间的流逝并触发超时。

转到Qt我计划将文件描述符包装在QSocketNotifier的实例中,并将activated(int)信号连接到合适的插槽。这基本上提供了Qt风格的poll - 除了没有超时!

对于超时,我正在考虑将QTimer与每个QSocketNotifier联系起来。我的实验证明了这一点,并且相当优雅。但是,测试并不令人愉快。我无法进行等待5分钟超时的测试。

如何使此解决方案中的超时可测试?

(或者我可能只是以错误的方式思考这个问题,应该做一些完全不同的事情。)

1 个答案:

答案 0 :(得分:4)

我认为这个问题可以解释为“如何模仿QTimer?”这个重写问题的答案是“间接的”。您可以使用QTimer上的抽象编写主程序,然后由测试代码模拟,以根据测试需求而不是基于时间发出信号。

接近此问题的一种特殊方法可能是测试代码将插槽与QTimer的信号断开连接,并在其位置连接自己的信号。