我将为使用pyqt(或PySide)作为GUI库的pyqt应用程序开发一些功能测试。测试使用Unittest和Qttest库,如许多参考资料中所述,例如这个stackoverflow问题:Unit and functional testing a PySide-based application? 对于主窗口来说一切正常,代码可以完美地模拟键盘类型和鼠标的点击和移动,但是“魔鬼在细节中”。。。而此方法不适用于QMessageBox。在
在主窗口的类中,为了在打开文件时管理IOError
,我初始化了一个QMessageBox:
self.IOErrMsgBox = QtGui.QMessageBox()
self.IOErrMsgBox.setText("<b>Error</b>")
self.IOErrMsgBox.setInformativeText("""
<p>There was an error opening
the project file:
%s.</p>"""%(path,))
self.IOErrMsgBox.setStandardButtons(QtGui.QMessageBox.Ok)
self.IOErrMsgBox.setDefaultButton(QtGui.QMessageBox.Ok)
self.IOErrMsgBox.exec_()
为了测试它是如何工作的,在功能测试中我有:
^{pr2}$或者,换言之:
def test__open_project(self):
#... some code, exactly like previous example except for last row...
QTest.keyClick(okWidget, 'o', Qt.AltModifier)
但没人工作。。。并且“确定”按钮没有被单击,我可以用鼠标指针来完成它:(
有什么建议吗?在
问题通常是关于如何测试模态对话框。在
任何包含QMessageBox的模式对话框在关闭之前都不会从
exec_()
返回,因此第二个代码框中的测试代码可能永远不会执行。在您只需
show()
它(使其成为非模态的),然后按照您的代码操作,但不要忘记关闭并删除对话框。在或者使用计时器并安排单击OK按钮(类似于Test modal dialog with Qt Test)。下面是一个例子:
相关问题 更多 >
编程相关推荐