Sur cette page

Chapitre 3 : Simulation d’événements de l’interface graphique

Qt Test présente plusieurs mécanismes permettant de tester les interfaces utilisateur graphiques. Au lieu de simuler des événements natifs du système de fenêtrage, Qt Test envoie des événements Qt internes. Cela signifie qu’il n’y a aucun effet secondaire sur la machine sur laquelle les tests s’exécutent.

Ce chapitre montre comment écrire un test d'interface graphique simple.

Écrire un test d'interface graphique

Supposons cette fois que vous souhaitiez tester le comportement de notre classe ` QLineEdit `. Comme précédemment, vous aurez besoin d’une classe contenant votre fonction de test :

#include <QtWidgets>
#include <QTest>

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui();

};

La seule différence est que vous devez inclure les définitions de la classe ` Qt GUI ` en plus de l’espace de noms ` QTest `.

void TestGui::testGui()
{
    QLineEdit lineEdit;

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

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

Dans l’implémentation de la fonction de test, nous créons d’abord un objet ` QLineEdit`. Ensuite, nous simulons la saisie de « hello world » dans le champ de saisie à l’aide de la fonction ` QTest::keyClicks()`.

Remarque : le widget doit également être affiché pour que les raccourcis clavier puissent être testés correctement.

QTest::keyClicks() simule l’enclenchement d’une séquence de touches sur un widget. Il est possible de spécifier une touche de modification ainsi qu’un délai (en millisecondes) entre chaque enfoncement de touche. De la même manière, vous pouvez utiliser les fonctions QTest::keyClick(), QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress() et QTest::mouseRelease() pour simuler les événements GUI associés.

Enfin, nous utilisons la macro QCOMPARE() pour vérifier si le texte de la zone de saisie correspond à ce qui est attendu.

Préparation de l’exécutable autonome

Comme précédemment, pour faire de notre cas de test un exécutable autonome, les deux lignes suivantes sont nécessaires :

QTEST_MAIN(TestGui)
#include "testgui.moc"

La macro QTEST_MAIN() se développe en une simple méthode main() qui exécute toutes les fonctions de test, et comme la déclaration et l’implémentation de notre classe de test se trouvent toutes deux dans un fichier .cpp, nous devons également inclure le fichier moc généré pour que l’introspection de Qt fonctionne.

Compilation de l'exécutable

Vous pouvez compiler l'exécutable du cas de test à l'aide de CMake ou de qmake.

Compilation avec CMake

Configurez vos paramètres de compilation dans votre fichier 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})

Ensuite, depuis la ligne de commande, exécutez soit « cmake », soit le script pratique « qt-cmake » situé dans « Qt-prefix/<version>/<platform>/bin/qt-cmake » :

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

Lancez ensuite votre outil de génération préféré pour compiler l'exécutable. Ici, nous utilisons Ninja :

ninja

Compilation avec qmake

Configurez vos paramètres de compilation dans votre fichier .pro:

QT += widgets testlib

SOURCES = testgui.cpp

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

Ensuite, exécutez ` qmake`, puis enfin ` make ` pour compiler votre exécutable :

qmake
make

Exécution de l'exécutable

L'exécution du fichier exécutable obtenu devrait vous donner le résultat suivant :

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