第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 公司和/或在世界其他地区的商标。所有其他商标均为其各自所有者的财产。