第4章:重放GUI事件
在本章中,我们将展示如何模拟一个GUI事件,以及如何将一系列GUI事件存储在widget上并重放它们。
存储一系列事件并重放的方法与第2章中解释的方法非常相似。你所要做的就是给你的测试类添加一个数据函数
class TestGui: public QObject { Q_OBJECT private slots: void testGui_data(); void testGui(); };
编写数据函数
和以前一样,测试函数关联的数据函数有相同的名称,后缀为_data
。
void TestGui::testGui_data() { QTest::addColumn<QTestEventList>("events"); QTest::addColumn<QString>("expected"); QTestEventList list1; list1.addKeyClick('a'); QTest::newRow("char") << list1 << "a"; QTestEventList list2; list2.addKeyClick('a'); list2.addKeyClick(Qt::Key_Backspace); QTest::newRow("there+back-again") << list2 << ""; }
首先,我们使用QTest::addColumn
()函数定义表格的元素:一个GUI事件列表和将事件列表应用于QWidget
的预期结果。请注意,第一个元素的数据类型是QTestEventList
。
QTestEventList
可以填充可存储为测试数据以供以后使用或重放于任何QWidget
的GUI事件。
在我们的当前数据函数中,我们创建了两个QTestEventList
元素。第一个列表由单个点击'a'键组成。我们使用QTestEventList::addKeyClick
()函数将事件添加到列表中。然后,我们使用QTest::newRow
()函数为数据集命名,并将事件列表和预期结果流式传输到表格中。
第二个列表由两个键击组成:一个'a'字和一个随后的'backspace'。我们再次使用QTestEventList::addKeyClick
()将事件添加到列表中,并使用QTest::newRow
()将事件列表和预期结果与关联的名称放入表格中。
重写测试函数
我们的测试现在可以重写
void TestGui::testGui() { QFETCH(QTestEventList, events); QFETCH(QString, expected); QLineEdit lineEdit; events.simulate(&lineEdit); QCOMPARE(lineEdit.text(), expected); }
TestGui::testGui()函数将被执行两次,一次针对在关联的TestGui::testGui_data()函数中创建的测试数据中的每个条目。
首先,我们使用QFETCH
宏获取数据集的两个元素。 QFETCH
取两个参数:元素的类型和元素名称。然后,我们创建一个QLineEdit
,并使用QTestEventList::simulate
()函数在该widget上应用事件列表。
最后,我们使用QCOMPARE
宏检查编辑框的文本是否符合预期。
准备独立的可执行文件
和以前一样,为了使我们的测试用例成为一个独立的可执行文件,需要以下两行:
QTEST_MAIN(TestGui)
#include "testgui.moc"
宏 QTEST_MAIN 输出为简单的 main() 方法,该方法运行所有测试函数。由于我们的测试类声明和实现都在 .cpp 文件中,因此还需要包含生成的 moc 文件,以便 Qt 实现反射。
构建可执行文件
您可以使用 CMake 或 qmake 构建测试用例的可执行文件。
使用 CMake 构建
在您的 CMakeLists.txt 文件中配置构建设置
# Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(tutorial4 LANGUAGES CXX) find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets) qt_standard_project_setup() qt_add_executable(tutorial4 testgui.cpp ) set_target_properties(tutorial4 PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) target_link_libraries(tutorial4 PRIVATE Qt6::Core Qt6::Gui Qt6::Test Qt6::Widgets ) install(TARGETS tutorial4 BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) qt_generate_deploy_app_script( TARGET tutorial4 OUTPUT_SCRIPT deploy_script NO_UNSUPPORTED_PLATFORM_ERROR ) install(SCRIPT ${deploy_script})
接下来,从命令行运行 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
文件中配置构建设置
QT += widgets testlib SOURCES = testgui.cpp # install target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial4 INSTALLS += target
接下来,运行 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 *********
© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证第 1.3 版 条款许可的。Qt 和相应标志是芬兰 Qt 公司和/或在世界其他地区的商标。所有其他商标均为其各自所有者的财产。