警告
本节包含从C++自动转换为Python的代码片段,可能存在错误。
第四章:重放GUI事件#
如何重放GUI事件。
在本章中,我们将展示如何模拟GUI事件,以及如何存储一系列GUI事件,并在小部件上重放它们。
存储一系列事件并重放的方法与第2章中解释的方法非常相似。您只需要向测试类中添加一个数据函数即可。
class TestGui(QObject): Q_OBJECT # private slots def testGui_data(): def testGui():
编写数据函数#
与之前一样,测试函数相关的数据函数具有相同的名称,后缀为_data
。
def testGui_data(self): QTest.addColumn<QTestEventList>("events") QTest.addColumn<QString>("expected") list1 = QTestEventList() list1.addKeyClick('a') QTest.newRow("char") << list1 << "a" list2 = QTestEventList() list2.addKeyClick('a') list2.addKeyClick(Qt.Key_Backspace) QTest.newRow("there+back-again") << list2 << ""
首先,我们使用addColumn()
函数定义表格的元素:一个GUI事件列表,以及将这些事件应用于QWidget的预期结果。请注意,第一个元素的类型是QTestEventList
。
QTestEventList
可以被填充为可以存储为测试数据以供稍后使用或可以在任何QWidget上重放的GUI事件。
在我们当前的数据函数中,我们创建了两个QTestEventList
元素。第一个列表由一个点击到“a”键组成。我们使用addKeyClick()
函数将该事件添加到列表中。然后我们使用newRow()
函数为数据集命名,并将事件列表和预期结果流式传输到表格中。
第二个列表包含两个键点击:一个跟随的“backspace”的“a”。我们再次使用addKeyClick()
将这些事件添加到列表中,并使用newRow()
将事件列表和预期结果放入具有关联命名的表格中。
重写测试函数#
我们的测试现在可以重写
def testGui(self): QFETCH(QTestEventList, events) QFETCH(QString, expected) lineEdit = QLineEdit() events.simulate(lineEdit) QCOMPARE(lineEdit.text(), expected)
TestGui::testGui()函数将执行两次,一次针对TestGui::testGui_data()函数中创建的测试数据中的每个条目。
首先,我们使用QFETCH()
宏获取数据集的元素。 QFETCH()
接受两个参数:元素的类型和元素名称。然后我们创建一个QLineEdit,并使用simulate()
函数将该事件列表应用于该小部件。
最后,我们使用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/tutorial4/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/tutorial4/tutorial4.pro" not found>
接下来,运行 qmake
,最后运行 make
来构建您的可执行文件
qmake make
运行可执行文件#
运行生成的可执行文件应该提供以下输出
********* Start testing of TestGui ********* Config: Using QtTest library %VERSION%, Qt %VERSION% PASS : TestGui::initTestCase() PASS : TestGui::testGui(char) PASS : TestGui::testGui(there+back-again) PASS : TestGui::cleanupTestCase() Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted, 18ms ********* Finished testing of TestGui *********