如何使用 Python 和 PyQt 对 GUI 程序进行单元测试?

问题描述 投票:0回答:3

我听说单元测试是保持代码正常工作的好方法。

单元测试通常将简单的输入放入函数中,并检查其简单的输出。但如何测试 UI?

我的程序是用PyQt编写的。我应该选择 PyUnit 还是 Qt 内置的 QTest?

python qt unit-testing pyqt
3个回答
37
投票

有一个关于使用 Python 的单元测试框架和 QTest 的很好的教程这里(旧链接不再起作用。从 WayBackMachine,页面显示这里)。

这不是选择其中之一。相反,它是关于将它们一起使用。 QTest 的目的只是模拟击键、鼠标单击和鼠标移动。 Python 的单元测试框架处理其余的事情(设置、拆卸、启动测试、收集结果等)。


11
投票

作为另一种选择,如果您更喜欢与 pytest-qt

 一起工作,还有 
pytest

https://pytest-qt.readthedocs.io/en/latest/intro.html

它可以让您测试

pyqt
pyside
应用程序并允许模拟用户交互。这是其文档中的一个小示例:

def test_hello(qtbot):
    widget = HelloWidget()
    qtbot.addWidget(widget)

    # click in the Greet button and make sure it updates the appropriate label
    qtbot.mouseClick(widget.button_greet, QtCore.Qt.LeftButton)

    assert widget.greet_label.text() == "Hello!"


0
投票

有一个使用 pytest-qt 的完美教程:

https://www.youtube.com/watch?v=WjctCBjHvmA&ab_channel=AdamBemski https://github.com/adambemski/blog/tree/master/006_pytest_qt_GUI_testing

其实很简单,教程中有一段代码:

import pytest

from PyQt5 import QtCore

import example_app


@pytest.fixture
def app(qtbot):
    test_hello_app = example_app.MyApp()
    qtbot.addWidget(test_hello_app)

    return test_hello_app


def test_label(app):
    assert app.text_label.text() == "Hello World!"


def test_label_after_click(app, qtbot):
    qtbot.mouseClick(app.button, QtCore.Qt.LeftButton)
    assert app.text_label.text() == "Changed!"
© www.soinside.com 2019 - 2024. All rights reserved.