如何在`unittest`框架中停止并重启`QApplication`?

时间:2017-11-29 21:57:09

标签: python qt unit-testing pyqt

我是Qt新手,我正在开发基于Qt的用户界面库。我想在QApplication上启动主setUp并在tearDown关闭它,这样我就不会在测试之间发生任何事件或其他问题。现在,这是我的setUp / tearDown方法:

class _QtTest(unittest.TestCase):
    def setUp(self):
        """Set up a QAppplication on each test case."""
        try:
            QApplication = QtGui.QApplication
        except AttributeError:
            QApplication = QtWidgets.QApplication

        self.qt_app = QApplication.instance()
        if self.qt_app is None:
            self.qt_app = QApplication(sys.argv)

    def tearDown(self):
        """Clear the QApplication's event queue."""
        # After each test, empty the event queue.
        # This should help to make sure that there aren't any event-based race
        # conditions where a C/C++ object is deleted before a slot is called.
        self.qt_app.sendPostedEvents()
        self.qt_app.quit()

不幸的是,最后self.qt_app.quit()似乎在所有连续测试中永久关闭了QApplication。有没有办法可以在QApplication方法中重新启动新的setUp

1 个答案:

答案 0 :(得分:0)

根据您的要求使用::exec()的{​​{1}}和::exit()方法。

调用QApplication进入主事件循环。在::exec()

中调用它

调用setUp会离开主事件循环。在::exit()

中调用它