我将为使用 PyQt(或 PySide)作为 GUI 库的 pyqt 应用程序开发一些功能测试。测试使用 Unittest 和 Qttest 库,正如许多资源中所报告的那样,例如这个 stackoverflow 问题:单元和功能测试基于 PySide 的应用程序? 对于主窗口,一切正常,并且代码完美地模拟了键盘类型和鼠标点击和移动,但是“魔鬼在细节中”......而且这种方法不适用于 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_()
为了测试它是如何工作的,在功能测试中我有:
def test__open_project(self):
self.MainWin._project_open(wrong_path, flag='c')
# the function that handles the exception
# and initializes the QMessageBox.
IOErrMsgBox = self.MainWin.IOErrMsgBox
# Reference to the initialized QMessageBox.
self.assertIsInstance(IOErrMsgBox, QMessageBox)
okWidget = self.MainWin.IOErrMsgBox.button(IOErrMsgBox.Ok)
QTest.mouseClick(okWidget, Qt.LeftButton)
或者,在替代方案中:
def test__open_project(self):
#... some code, exactly like previous example except for last row...
QTest.keyClick(okWidget, 'o', Qt.AltModifier)
但是没有人工作......并且没有单击“确定”按钮,我可以用鼠标指针完成它:(
有什么建议么?