我刚刚完成了一个软件,想在python' TestCase
的帮助下进行测试。方法test_show_video
应该开始QTimer
。它连接到test_run_iteration
,它每0.1秒向上汇总一个索引。在调用assert
之前,该方法有三秒的时间来总结索引,因此它应该大于零。但事实并非如此。有人有线索吗?实际上,与计时器的超时连接似乎是错误的。
try:
app = QtGui.QApplication(sys.argv)
except RuntimeError:
app = QtCore.QCoreApplication.instance()
class TestProgressPresenter(TestCase):
def test_show_video(self):
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.test_run_iteration)
self.timer.start(100)
self.index = 0
millis = start_time = int(round(time.time() * 1000))
while start_time + 3000 > millis:
millis = int(round(time.time() * 1000))
assert self.index > 0
def test_run_iteration(self):
self.index += 1
答案 0 :(得分:3)
这里你在while
循环期间阻止Qt事件循环3秒。实际上,在控制权返回到事件循环之前,不会调用计时器的timeout
信号,并且当完成时间并且test_show_video
完成时,不会调用此计时器。
如果您希望定时器被触发,您应该确保在while循环检查期间处理事件。为此你可以有一些东西:
while start_time + 3000 > millis:
millis = int(round(time.time() * 1000))
QApplication.processEvents(QEventLoop.AllEvents)
使用本地事件循环等待几秒钟会更容易:
self.loop = QtCore.QEventLoop()
QTimer.singleShot(3000, loop.quit)
loop.exec()
assert self.index > 0