我正在尝试使用unittest测试Qt.QThread中的方法。
import sys
import unittest
from PyQt4 import Qt, QtCore, QtGui
class ConnectionBox(QtCore.QObject):
"""
a class to test any signal emition
"""
def __init__(self, *args):
apply(QtCore.QObject.__init__,(self,)+args)
self.signalArrived=0
self.args=[]
def slotSlot(self, *args):
self.signalArrived=1
self.args = args
class ThreadToTest(QtCore.QThread):
"""
the thread to test
"""
def __init__(self):
super(ThreadToTest, self).__init__()
def run(self):
self.emit(QtCore.SIGNAL("signalEmited()"))
class TestSignalEmition(unittest.TestCase):
"""
the test case
"""
def setUp(self):
self.app = QtGui.QApplication(sys.argv)
self.connectionBox = ConnectionBox()
def tearDown(self):
self.app = None
self.connectionBox = None
def testThread(self):
self.thread = ThreadToTest()
self.app.connect(self.thread, QtCore.SIGNAL("signalEmited()"), self.connectionBox.slotSlot)
self.thread.start()
self.assertEqual(self.connectionBox.signalArrived, 1)
self.thread.quit()
def suite():
testSuite=unittest.makeSuite(TestSignalEmition)
return testSuite
def main():
runner = unittest.TextTestRunner()
runner.run(suite())
if __name__=="__main__":
main()
应该发生什么:
但是没有做出第3步。 它与unittest或QThread相关吗?
感谢您的投入
(编辑更容易看到结果)
答案 0 :(得分:0)
有一些问题。
如果没有先定义信号,就无法发出信号。您需要先在QThread
上创建信号才能发出信号。此外,您应该使用新式的信号/插槽语法。
class ThreadToTest(QtCore.QThread):
signalToEmit = QtCore.pyqtSignal()
def run(self):
self.signalToEmit.emit()
此外,信号和插槽(以及所有其他事件处理)仅在正在运行的QApplication
事件循环中发生。在您运行app.exec_()
之前,事件循环才会开始。
我认为使用标准unittest
框架以这种方式测试PyQt是不可能的。您可能需要查看QTest
模块。