我有一个pyqt应用程序,我正在为它编写单元测试,它严重依赖于信号和插槽。为了正确地测试它,我必须检查是否发送了正确的信号。在
最好的办法是什么?我看到Qt库有一个QSignalSpy,但在PyQt中找不到任何引用。我能想到的唯一选择是模仿emit,例如
import testedmodule
def myemit(signal):
....
testedmodule.QObject.emit = myemit
但我希望有更好的方法。在
编辑:
我的模块是作为线程运行的,在这种情况下,在启动线程之后,重写实例的发出不再起作用,所以我更新了上面的代码以反映这一点。在
注意QSignalSpy在PyQt5中是available,即
QtTest.QSignalSpy
。在这是我自己建议的更详细的版本,不一定是unittest的最佳解决方案,但我认为其他遇到这种情况的人会感兴趣:
Carlos Scheidegger在pyqt邮件列表(http://thread.gmane.org/gmane.comp.python.pyqt-pykde/9242/focus=9245)上发布
只需调用enableSignalDebugging(emitCall=foo)并监视信号,直到 你肚子不舒服:)
你可以尝试连接一个插槽到你的信号,准备你的测试,然后打电话qApp.processEvents()让信号传播。但我不认为它100%可靠。在
遗憾的是QSignalSpy并不是PyQt的一部分。在
相关问题 更多 >
编程相关推荐