2017-11-29 19 views
0

私はQt初心者です。私はQtに基づいてユーザーインターフェイスライブラリを開発しています。メインQApplicationsetUpに開始し、それをtearDownで終了したいので、テストの間に漏れたイベントやその他の問題はありません。ここでは今、私のsetUp/tearDown方法です:`unittest`フレームワークで` QApplication`を停止して再起動するには?

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をシャットダウンするようです。 setUpメソッドで新しいQApplicationを再起動する方法はありますか?

+0

あなたは[pytest](https://docs.pytest.org/en/latest/)と[pytest-qt](https://pypi.python.org/pypi/pytest- qt)plugin?私はこれらのどちらも使いませんでしたが、どちらも成熟した、よく整備されたプロジェクトであり、合理的に良い[documentation](https://pytest-qt.readthedocs.io/en/latest/)となっています。 – ekhumoro

答えて

0

::exec()::exit()の方法をQApplicationとしてください。

::exec()を呼び出すと、メインイベントループに入ります。 setUpに電話してください。

::exit()を呼び出すと、メインイベントループが終了します。 tearDownに電話してください。

+0

'quit()'が 'exit(0)'と同じであれば、これはどのように役立ちますか? – ekhumoro

+0

True .....私は彼がアプリケーションを起動するために "exec"を使うことができると考えています。残りは読みやすくするためのものです。 – Naidu

+0

こんにちは、私はこれを試して、私は 'pyqtの同等は' exec_'だと思うが、それはブロッキングコールです。それを 'setUp'に入れるとロット全体がフリーズします。私はここで何をすべきか分からない。スレッドで起動するのは意味がありますか? – Rich

関連する問題