第三章:模拟GUI事件

Qt Test 提供了一些机制来测试图形用户界面。与模拟原生窗口系统事件不同,Qt Test 通过发送内部 Qt 事件来模拟事件。这意味着测试运行的机器上没有副作用。

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

编写 GUI 测试

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

#include <QtWidgets>
#include <QTest>

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui();

};

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

void TestGui::testGui()
{
    QLineEdit lineEdit;

    QTest::keyClicks(&lineEdit, "hello world");

    QCOMPARE(lineEdit.text(), QString("hello world"));
}

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

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

QTest::keyClicks() 模拟在组件上单击一系列键。可选地,可以指定键盘修改键以及测试中每个键点击后的延迟(以毫秒为单位)。以类似的方式,可以使用 QTest::keyClick()、QTest::keyPress()、QTest::keyRelease()、QTest::mouseClick()、QTest::mouseDClick()、QTest::mouseMove()、QTest::mousePress() 和 QTest::mouseRelease() 函数来模拟相关的 GUI 事件。

最后,我们使用 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(tutorial3 LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)

qt_standard_project_setup()

qt_add_executable(tutorial3
    testgui.cpp
)

set_target_properties(tutorial3 PROPERTIES
    WIN32_EXECUTABLE TRUE
    MACOSX_BUNDLE TRUE
)

target_link_libraries(tutorial3 PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Test
    Qt6::Widgets
)

install(TARGETS tutorial3
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

qt_generate_deploy_app_script(
    TARGET tutorial3
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})

接下来,从命令行运行cmake,或者使用位于Qt-prefix///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/tutorial3
INSTALLS += target

接下来,运行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 **

© 2024 Qt公司。本文件中包含的文档贡献是各自所有者的版权。本文件中提供的文档是根据自由软件基金会发布的版本1.3的GNU自由文档许可证许可的。Qt及其相应标志是芬兰及/或世界其他国家的Qt公司的商标。所有其他商标均为各自所有者所有。