PyQt (または PySide) を GUI ライブラリとして使用する pyqt アプリケーションの機能テストをいくつか開発します。多くのリソースで報告されているように、テストでは Unittest および Qttest ライブラリを使用します。 メインウィンドウではすべて正常に動作し、コードはキーボードの種類とマウスのクリックと動きを完全にシミュレートしますが、「悪魔は細部に宿る」...そしてこの方法は 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)
しかし、誰も機能しません...そして[OK]ボタンはクリックされず、マウスポインターで実行できます:(
助言がありますか?