首页 > 解决方案 > pytest-qt 测试对话框

问题描述

我正在尝试构建一个对话框并为它编写一个测试用例。

这是我的对话框代码 -

import sys
import os.path as osp
from qtpy import QT_VERSION
from qtpy import QtCore
from qtpy import QtGui
from qtpy import QtWidgets

QT5 = QT_VERSION[0] == '5'  # NOQA

here = osp.dirname(osp.abspath(__file__))

def newIcon(icon):
    icons_dir = osp.join(here, 'icons')
    return QtGui.QIcon(osp.join(':/', icons_dir, '%s.png' % icon))

class Example(QtWidgets.QMainWindow):
    count = 0
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)            
        self.meta = MetaDialog()            
        self.meta.popUp()            

class MetaDialog(QtWidgets.QDialog):

    def __init__(self, parent=None,):
        super(MetaDialog, self).__init__(parent)
        self.parent = parent
        self.setWindowTitle('Meta information')                    
        self.street1 = QtWidgets.QLabel('street1')
        self.street2 = QtWidgets.QLabel('street2')

        self.street1_edit = QtWidgets.QLineEdit()
        self.street2_edit = QtWidgets.QLineEdit()

        grid = QtWidgets.QGridLayout()
        grid.setSpacing(10)
        grid.addWidget(self.street1, 0, 0)
        grid.addWidget(self.street1_edit, 0, 1)        
        grid.addWidget(self.street2, 1, 0)
        grid.addWidget(self.street2_edit, 1, 1)                                
        # buttons
        self.buttonBox = bb = QtWidgets.QDialogButtonBox(
            QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel,
            QtCore.Qt.Horizontal,            
            self,
        )
        bb.button(bb.Ok).setIcon(newIcon('done'))
        bb.button(bb.Cancel).setIcon(newIcon('undo'))
        bb.accepted.connect(self.validate)
        bb.rejected.connect(self.reject)
        grid.addWidget(bb, 11,0)
        self.setLayout(grid)

    def validate(self):
        self.accept()

    def popUp(self, meta=None):

        return (self.street1_edit.text(),
                self.street2_edit.text(),                
                )  if self.exec_() else None


if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    ex = Example()
#     ex.show()
    sys.exit(app.exec_())    

当我尝试创建测试用例并运行它时,对话框就会弹出。我只想知道是否为对话框设置了默认值并且不想弹出它。

import unittest
import dialog_test
from PyQt5.Qt import QApplication
import sys


app = QApplication(sys.argv)

class Test(unittest.TestCase):


    def setUp(self):
        self.ex = dialog_test.Example()

    def tearDown(self):
        pass


    def testName(self):

        assert True == True


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

标签: pythonpyqtpyqt5pytest

解决方案


exec_()调用使 QDialog 可见,你不应该调用它:

def popUp(self, meta=None):
    return (self.street1_edit.text(),
            self.street2_edit.text())

推荐阅读