警告
本节包含从 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 **