En esta página

Capítulo 3: Simulación de eventos GUI

Qt Test presenta algunos mecanismos para probar interfaces gráficas de usuario. En lugar de simular eventos nativos del sistema de ventanas, Qt Test envía eventos internos de Qt. Esto significa que no hay efectos secundarios en la máquina en la que se ejecutan las pruebas.

Este capítulo muestra cómo escribir una sencilla prueba de GUI.

Escribiendo un test GUI

Esta vez, vamos a suponer que quieres probar el comportamiento de nuestra clase QLineEdit. Como antes, necesitarás una clase que contenga tu función de prueba:

#include <QtWidgets>
#include <QTest>

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui();

};

La única diferencia es que necesita incluir las definiciones de la clase Qt GUI además del espacio de nombres QTest.

void TestGui::testGui()
{
    QLineEdit lineEdit;

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

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

En la implementación de la función de prueba, primero creamos un QLineEdit. Luego, simulamos escribir "hola mundo" en la línea de edición utilizando la función QTest::keyClicks().

Nota: El widget también debe mostrarse para poder probar correctamente los atajos de teclado.

QTest::keyClicks() simula la pulsación de una secuencia de teclas en un widget. Opcionalmente, se puede especificar un modificador de teclado, así como un retardo (en milisegundos) de la prueba tras cada pulsación de tecla. De forma similar, se pueden utilizar las funciones QTest::keyClick(), QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress() y QTest::mouseRelease() para simular los eventos GUI asociados.

Por último, utilizamos la macro QCOMPARE() para comprobar si el texto de la edición de línea es el esperado.

Preparación del ejecutable independiente

Como antes, para hacer de nuestro caso de prueba un ejecutable autónomo, se necesitan las dos líneas siguientes:

QTEST_MAIN(TestGui)
#include "testgui.moc"

La macro QTEST_MAIN() se expande a un simple método main() que ejecuta todas las funciones de prueba, y dado que tanto la declaración como la implementación de nuestra clase de prueba están en un archivo .cpp, también necesitamos incluir el archivo moc generado para que funcione la introspección de Qt.

Construir el ejecutable

Puedes construir el ejecutable del caso de prueba usando CMake o qmake.

Construir con CMake

Configura los parámetros de compilación en tu archivo 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})

A continuación, desde la línea de comandos, ejecute cmake o utilice el script de conveniencia qt-cmake ubicado en Qt-prefix/<version>/<platform>/bin/qt-cmake:

<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja

A continuación, ejecute su herramienta generadora preferida para construir el ejecutable. Aquí, estamos usando Ninja:

ninja

Compilación con qmake

Configura los parámetros de compilación en tu archivo .pro:

QT += widgets testlib

SOURCES = testgui.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial3
INSTALLS += target

A continuación, ejecuta qmake y, por último, ejecuta make para crear el ejecutable:

qmake
make

Ejecutar el ejecutable

Si ejecutas el ejecutable resultante, obtendrás el siguiente resultado:

********* 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 **

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.