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 NinjaLancez ensuite votre outil de génération préféré pour compiler l'exécutable. Ici, nous utilisons Ninja :
ninjaCompilation 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 += targetEnsuite, exécutez ` qmake`, puis enfin ` make ` pour compiler votre exécutable :
qmake
makeExécution de l'exécutable
L'exécution du fichier exécutable obtenu devrait vous donner le résultat suivant :
© 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.