我正在使用 PySide 和 Qt 开发各种 GUI 测试库。到目前为止,当测试用例只需要等待一个条件发生(例如信号或超时)时,它工作得非常好,但我的问题是在继续进行数据验证之前必须等待多个条件发生。
测试运行器在自己的线程中工作,以免过多地干扰主线程。等待信号/超时发生在事件循环中,这是可以很好地工作的部分(简化示例):
# Create a simple event loop and fail timer (to prevent infinite waiting)
loop = QtCore.QEventLoop()
failtimer = QtCore.QTimer()
failtimer.setInterval(MAX_DELAY)
failtimer.setSingleShot(True)
failtimer.timeout.connect(loop.quit)
# Connect waitable signal to event loop
condition.connect(loop.quit) # condition is for example QLineEdit.textChanged() signal
# Perform test action
testwidget.doStuff.emit() # Function not called directly, but via signals
# Wait for condition, or fail timeout, to happen
loop.exec_()
# Verify data
assert expectedvalue == testwidget.readValue()
等待必须是同步的,因此事件循环是可行的方法,但它不适用于多个信号。等待多个条件中的任何一个当然是可能的,但不要等待多个条件/信号全部发生。那么关于如何进行此操作的任何建议?
我正在考虑一个辅助类,它计算接收到的信号数量,然后在达到所需数量后发出一个 ready() 信号。但这真的是最好的方法吗?助手还必须检查每个发送者,以便只考虑特定信号的一个“实例”。