警告

本节包含从 C++ 自动翻译成 Python 的代码片段,可能包含错误。

第三章:模拟 GUI 事件#

如何模拟 GUI 事件。

Qt 测试包含一些机制来测试图形用户界面。Qt 测试不是模拟原生窗口系统事件,而是发送内部 Qt 事件。这意味着测试运行的机器上没有副作用。

本章演示了如何编写一个简单的 GUI 测试。

编写 GUI 测试#

这次,让我们假设你想测试我们的 QLineEdit 类的行为。像以前一样,你需要一个包含你的测试函数的类。

from PySide6 import QtWidgets
from PySide6.QtTest import QTest
class TestGui(QObject):

    Q_OBJECT
# private slots
    def testGui():

唯一不同的是,除了需要包含 QTest 命名空间外,你还需要包含 Qt GUI 类定义。

def testGui(self):

    lineEdit = QLineEdit()
    QTest.keyClicks(lineEdit, "hello world")
    QCOMPARE(lineEdit.text(), QString("hello world"))

在测试函数的实现中,我们首先创建一个 QLineEdit。然后,我们使用 keyClicks() 函数在行编辑中模拟写入“hello world”。

注意

为了正确测试键盘快捷键,小部件也必须显示。

keyClicks() 模拟在小部件上按下一系列键。你可以指定一个键盘修饰符,以及在测试的每个键点击之后(以毫秒为单位)的延迟。以类似的方式,你可以使用 keyClick() , keyPress() , keyRelease() , mouseClick() , mouseDClick() , mouseMove() , mousePress()mouseRelease() 函数来模拟相关的 GUI 事件。

最后,我们使用 QCOMPARE() 宏检查行编辑的文本是否如预期。

准备独立的可执行文件#

为了使测试案例成为一个独立的可执行文件,需要以下两条命令

QTEST_MAIN(TestGui)
from testgui.moc import *

QTEST_MAIN() 宏展开为一个简单的 main() 方法,它运行所有测试函数;由于我们的测试类的声明和实现都在一个 .cpp 文件中,因此我们还需要包含生成的 moc 文件,以便 Qt 的内省功能工作。

构建可执行文件#

你可以使用 CMake 或 qmake 构建测试案例的可执行文件。

使用 CMake 构建#

在你的 CMakeLists.txt 文件中配置你的构建设置

<Code snippet "/data/qt5-full-670/6.7.0/Src/qtbase/tutorial3/CMakeLists.txt" not found>

接下来,从命令行运行 cmake 或使用位于 Qt-prefix/<version>/<platform>/bin/qt-cmake 的便捷脚本 qt-cmake

<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja

然后,运行您首选的生成工具来构建可执行文件。这里我们使用的是 Ninja 工具

ninja

使用 qmake 构建#

在您的 .pro 文件中配置构建设置

<Code snippet "/data/qt5-full-670/6.7.0/Src/qtbase/tutorial3/tutorial3.pro" not found>

接下来,运行 qmake,最后运行 make 来构建您的可执行文件

qmake
make

运行可执行文件#

运行生成可执行文件应该得到以下输出

********* Start testing of TestGui *********
Config: Using QtTest library %VERSION%, Qt %VERSION%
PASS   : TestGui::initTestCase()
PASS   : TestGui::testGui()
PASS   : TestGui::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 20ms
********* Finished testing of TestGui **