c++ - 控制QTimer的时间?

标签 c++ qt testing time

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

  • intput0 上静默 5 分钟后,我们假设对方已经死亡,我们尝试重新建立联系
  • 我们希望客户端连接到 socket0
  • 一旦客户端连接到 socket0,就会调用 accept (socket1),客户端有时间发出请求在 socket1 关闭之前

通过使用LD_PRELOAD 和“隐藏”涉及的系统函数(poll, gettimeofday ) 可以(某种程度上)轻松控制时间的流逝并触发超时。

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

对于超时,我正在考虑将 QTimer 耦合到每个 QSocketNotifier。我的实验表明这是可行的,而且相当优雅。但是,测试并不令人愉快。我真的无法进行等待 5 分钟超时的测试。

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

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

最佳答案

我相信这个问题可以解释为“如何模拟 QTimer?”这个改写后的问题的答案是“间接的”。您可以使用 QTimer 的抽象来编写您的主程序,然后测试代码会模拟它以根据测试需要而不是根据时间发出信号。

解决这个问题的一种特殊方法是让测试代码断开插槽与 QTimer 信号的连接,并在其位置连接自己的信号。

关于c++ - 控制QTimer的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40401863/

相关文章:

testing - JMeter如何加载测试流上传

c++ - sprintf 未定义行为

c++ - 将 CMakeLists QT4 更新为 QT5

c++ - Eclipse 不会更改 C++ 中的输出类型

c++ - QT QTableWidget::item() 返回 nullptr,即使 widget 分配给它

multithreading - 将参数传递给 QThread 的 run() 方法

reactjs - 如何用 Jest 测试 redux saga?

javascript - 在 Ember 中使用 Sinon 的假服务器

c++ - 字符数组输出不正确

C++ 赋值构造函数 Valgrind 错误