Sur cette page

Qt Quick Test

Introduction

Qt Quick Test est un framework de tests unitaires pour les applications QML. Les cas de test sont écrits sous forme de fonctions JavaScript au sein d'un objet de type ` TestCase ` :

import QtQuick 2.3
import QtTest 1.0

TestCase {
    name: "MathTests"

    function test_math() {
        compare(2 + 2, 4, "2 + 2 = 4")
    }

    function test_fail() {
        compare(2 + 2, 5, "2 + 2 = 5")
    }
}

Les fonctions dont le nom commence par test_ sont considérées comme des cas de test à exécuter. Consultez la documentation relative aux types TestCase et SignalSpy pour plus d’informations sur l’écriture de cas de test.

Remarque : il n’y a aucune garantie de compatibilité binaire pour le module ` Qt Quick Test `. Cela signifie qu’une application utilisant ` Qt Quick Test ` n’est garantie de fonctionner qu’avec la version de Qt pour laquelle elle a été développée. La compatibilité au niveau du code source est toutefois garantie.

Utilisation du module

API QML

Les types QML de Qt Quick Test sont accessibles via l'importation QtTest. Pour utiliser ces types, ajoutez la déclaration d'importation suivante à votre fichier .qml :

import QtTest

API C++

L’utilisation de la bibliothèque « C++ API » nécessite une liaison avec la bibliothèque du module, soit directement, soit via d’autres dépendances. Plusieurs outils de compilation prennent cela en charge, notamment CMake et qmake.

Compilation avec CMake

Utilisez la commande ` find_package() ` pour localiser les composants de module nécessaires dans le paquet Qt6 :

find_package(Qt6 REQUIRED COMPONENTS QuickTest)
target_link_libraries(mytarget PRIVATE Qt6::QuickTest)

Voir également la présentation « Compilation avec CMake ».

Compilation avec qmake

Il existe deux façons de lier la bibliothèque C++ correspondante. Si votre projet de test utilise une TestCase QML, la ligne suivante devrait déjà figurer dans votre fichier de projet :

CONFIG += qmltestcase

Cela permettra au test de se lier à la bibliothèque C++ QtQuickTest.

Si vous disposez d'un projet de test exclusivement en C++, vous pouvez ajouter la ligne suivante à votre fichier de projet :

QT += qmltest

Exécution des tests

Les cas de test sont lancés par un harnais C++ composé du code suivant :

#include <QtQuickTest>
QUICK_TEST_MAIN(example)

Où « example » est l'identifiant permettant d'identifier de manière unique cet ensemble de tests.

Configurez votre fichier CMakeLists.txt et compilez votre projet à l'aide de votre générateur préféré.

cmake_minimum_required(VERSION 3.2)

project(tst_example LANGUAGES CXX)

enable_testing()

find_package(Qt6 REQUIRED COMPONENTS QuickTest Qml)

#[[The test harness scans the specified source directory recursively
for "tst_*.qml" files. By default, it looks in the current directory,
which is usually where the executable is. This command makes it look
in the project's source directory instead.]]
add_definitions(-DQUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")

qt_standard_project_setup(REQUIRES 6.6)

add_executable(tst_example tst_example.cpp)

add_test(NAME tst_example COMMAND tst_example)

target_link_libraries(tst_example
    PRIVATE
    Qt6::QuickTest
    Qt6::Qml
)

Ajoutez CONFIG += qmltestcase à votre fichier de projet :

TEMPLATE = app
TARGET = tst_example
CONFIG += warn_on qmltestcase
SOURCES += tst_example.cpp

Si IMPORTPATH est spécifié dans votre fichier .pro, chaque chemin d'importation ajouté à IMPORTPATH sera transmis en tant qu'argument de ligne de commande lors de l'exécution du test à l'aide de « make check » :

IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2

Le harnais de test analyse de manière récursive le répertoire source spécifié à la recherche de fichiers « tst_*.qml ». Si QUICK_TEST_SOURCE_DIR n’est pas défini, c’est le répertoire courant qui sera analysé lors de l’exécution du harnais. D’autres fichiers *.qml peuvent apparaître pour les composants QML auxiliaires utilisés par le test.

L’option de ligne de commande -input peut être définie au moment de l’exécution pour exécuter des cas de test à partir d’un répertoire différent. Cela peut s’avérer nécessaire pour exécuter des tests sur un appareil cible où le nom de répertoire compilé fait référence à un hôte. Par exemple :

tst_example -input /mnt/SDCard/qmltests

Il est également possible d’exécuter un seul fichier à l’aide de l’option ` -input `. Par exemple :

tst_example -input data/test.qml
tst_example -input <full_path>/test.qml

Remarque : il est par exemple nécessairede spécifier le chemin d’accès complet au fichier de test QML pour les builds fantômes.

Si votre cas de test nécessite des importations QML, vous pouvez les ajouter en tant qu’options ` -import ` à la ligne de commande du programme de test.

L’option de ligne de commande « -functions » renvoie une liste des fonctions de test actuelles. Il est possible d’exécuter une seule fonction de test en utilisant le nom de cette fonction comme argument. Par exemple :

tst_example Test_Name::function1

L'option de ligne de commande « -help » renvoie toutes les options disponibles.

tst_example -help

Remarque : l'exécution d'un cas de test « Qt Quick » affiche toujours une fenêtre à l'écran, même si le code de test n'implique aucune interface utilisateur Quick UI. Pour éviter cela, exécutez le programme de test avec l'option « -platform offscreen ».

Exécution de code C++ avant les tests QML

Pour exécuter du code C++ avant l'exécution de n'importe quel test QML, vous pouvez utiliser la macro ` QUICK_TEST_MAIN_WITH_SETUP `. Cela peut notamment s'avérer utile pour définir des propriétés de contexte sur le moteur QML.

Cette macro est identique à ` QUICK_TEST_MAIN`, à l’exception qu’elle prend un argument de type supplémentaire. Le framework de test appellera les slots et les fonctions invoquables portant les noms suivants :

NomObjectifDepuis
void applicationAvailable()Appelée immédiatement après l’instanciation de l’objet `QApplication`. Utilisez cette fonction pour effectuer une configuration ne nécessitant pas d’instance de ` QQmlEngine `.Qt 5.12
void qmlEngineAvailable(QQmlEngine *)Appelée lorsque le moteur QML est disponible. À ce stade, les paramètres import paths, plugin paths et extra file selectors auront déjà été définis sur le moteur.

Cette fonction est appelée une fois pour chaque fichier de test QML ; ses arguments sont donc propres à ce test. Cela signifie, par exemple, que chaque fichier de test QML disposera de son propre moteur QML.

Cette fonction peut notamment être utilisée pour enregistrer des types QML et des « add import paths ».

Qt 5.11
void cleanupTestCase()Appelée immédiatement après la fin de l'exécution du test. Utilisez cette fonction pour effectuer un nettoyage avant que tout ne commence à être détruit.Qt 5.12

L'exemple suivant montre comment utiliser la macro pour définir des propriétés de contexte sur le moteur QML :

// src_qmltest_qquicktest.cpp
#include <QtQuickTest>
#include <QQmlEngine>
#include <QQmlContext>
#include <QGuiApplication>

class Setup : public QObject
{
    Q_OBJECT

public:
    Setup() {}

public slots:
    void applicationAvailable()
    {
        // Initialization that only requires the QGuiApplication object to be available
    }

    void qmlEngineAvailable(QQmlEngine *engine)
    {
        // Initialization requiring the QQmlEngine to be constructed
        engine->rootContext()->setContextProperty("myContextProperty", QVariant(true));
    }

    void cleanupTestCase()
    {
        // Implement custom resource cleanup
    }
};

QUICK_TEST_MAIN_WITH_SETUP(mytest, Setup)

#include "src_qmltest_qquicktest.moc"

L'inclusion « .moc » est basée sur le nom du fichier « .cpp ». Par exemple, dans l'exemple ci-dessus, le fichier « .cpp » est nommé « src_qmltest_qquicktest.cpp ». Si le fichier s'appelait « MyTest.cpp », l'inclusion serait :

#include "MyTest.moc"

Référence

Licences

Qt Quick Qt Test est disponible sous des licences commerciales auprès de The Qt Company. Il est également disponible sous des licences de logiciel libre. Depuis Qt 5.4, ces licences de logiciel libre sont la Licence publique générale réduite GNU, version 3, ou la Licence publique générale GNU, version 2. Voir Licences Qt pour plus de détails.

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