我正在使用PySide和Qt开发一种GUI测试库。目前,当测试案例只需要等待一个条件(例如信号或超时)时,它的功能非常好。但是,我的问题是在进行数据验证之前必须等待多个条件发生。
为了不对主线程造成太大干扰,测试运行器在其自己的线程中运行。等待信号/超时是通过事件循环完成的,并且这部分工作非常出色(以下是一个简化示例)。
等待必须是同步的,因此事件循环是解决方法,但无法处理多个信号。当然可以等待任何多个条件,但无法等待多个条件/信号全部发生。那么对于如何继续进行,有什么建议吗?
我正在考虑一个辅助类,它计算接收到的信号数量,一旦达到所需计数就发出 ready()-信号。但这真的是最好的方法吗?该辅助程序还必须检查每个发送器,以便只计算特定信号的一个“实例”。
为了不对主线程造成太大干扰,测试运行器在其自己的线程中运行。等待信号/超时是通过事件循环完成的,并且这部分工作非常出色(以下是一个简化示例)。
# 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()-信号。但这真的是最好的方法吗?该辅助程序还必须检查每个发送器,以便只计算特定信号的一个“实例”。
unittest.mock
作为示例。 - Bakuriu