En esta página

Qt Quick Prueba

Introducción

Qt Quick Test es un marco de pruebas unitarias para aplicaciones QML. Los casos de prueba se escriben como funciones JavaScript dentro de un tipo 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")
    }
}

Las funciones cuyos nombres comienzan por test_ se tratan como casos de prueba que deben ejecutarse. Consulte la documentación de los tipos TestCase y SignalSpy para obtener más información sobre la escritura de casos de prueba.

Nota: No hay garantía de compatibilidad binaria para el módulo Qt Quick Test. Esto significa que una aplicación que utilice Qt Quick Test sólo tiene garantizado su funcionamiento con la versión de Qt con la que fue desarrollada. Sin embargo, sí se garantiza la compatibilidad de código fuente.

Uso del módulo

API QML

Los tipos QML de Qt Quick Test están disponibles a través de la importación de QtTest. Para utilizar los tipos, añada la siguiente sentencia import a su archivo .qml:

import QtTest

API DE C

El uso de C++ API requiere la vinculación con la biblioteca de módulos, ya sea directamente o a través de otras dependencias. Varias herramientas de compilación tienen soporte dedicado para esto, incluyendo CMake y qmake.

Compilación con CMake

Utilice el comando find_package() para localizar los componentes del módulo necesarios en el paquete Qt6:

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

Véase también la descripción general de Construir con CMake.

Construir con qmake

Hay dos formas de enlazar con la biblioteca C++ correspondiente. Si su proyecto de prueba utiliza un QML TestCase, ya debería tener la siguiente línea en su archivo de proyecto:

CONFIG += qmltestcase

Esto hará que la prueba se enlace con la biblioteca C++ QtQuickTest.

Si tiene un proyecto de prueba sólo C++, puede añadir la siguiente línea a su archivo de proyecto:

QT += qmltest

Ejecutando Pruebas

Los casos de prueba son lanzados por un arnés C++ que consiste en el siguiente código:

#include <QtQuickTest>
QUICK_TEST_MAIN(example)

Donde "ejemplo" es el identificador a utilizar para identificar unívocamente este conjunto de pruebas.

Configura tu archivo CMakeLists.txt y construye tu proyecto usando tu generador favorito.

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
)

Añada CONFIG += qmltestcase a su archivo de proyecto:

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

Si se especifica IMPORTPATH en su archivo .pro, cada ruta de importación añadida a IMPORTPATH se pasará como argumento de línea de comandos cuando se ejecute la prueba utilizando "make check":

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

El arnés de pruebas busca recursivamente archivos "tst_*.qml" en el directorio de fuentes especificado. Si no se define QUICK_TEST_SOURCE_DIR, se buscará en el directorio actual cuando se ejecute el arnés. Pueden aparecer otros archivos *.qml para componentes QML auxiliares utilizados por la prueba.

La opción de línea de comandos -input puede definirse en tiempo de ejecución para ejecutar los casos de prueba desde un directorio diferente. Esto puede ser necesario para ejecutar pruebas en un dispositivo de destino en el que el nombre del directorio compilado hace referencia a un host. Por ejemplo:

tst_example -input /mnt/SDCard/qmltests

También es posible ejecutar un único archivo utilizando la opción -input. Por ejemplo:

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

Nota: la especificación de la ruta completa al archivo de prueba qml es necesaria, por ejemplo, para las compilaciones shadow.

Si su caso de prueba necesita importaciones QML, puede añadirlas como opciones -import a la línea de comandos del programa de prueba.

La opción de línea de comandos -functions devolverá una lista de las funciones de prueba actuales. Es posible ejecutar una única función de prueba utilizando el nombre de la función de prueba como argumento. Por ejemplo:

tst_example Test_Name::function1

La opción de línea de comandos -help devolverá todas las opciones disponibles.

tst_example -help

Nota: La ejecución de un caso de prueba Qt Quick siempre mostrará una ventana en la pantalla, aunque el código de prueba no implique ninguna interfaz de usuario rápida. Para evitarlo, ejecute la prueba con -platform offscreen.

Ejecución de C++ antes de las pruebas QML

Para ejecutar código C++ antes de que se ejecute cualquiera de las pruebas QML, se puede utilizar la macro QUICK_TEST_MAIN_WITH_SETUP. Esto puede ser útil para establecer propiedades de contexto en el motor QML, entre otras cosas.

La macro es idéntica a QUICK_TEST_MAIN, salvo que toma un argumento de tipo adicional. El marco de pruebas llamará a ranuras y funciones invocables con los siguientes nombres:

NombreFinalidadDesde
void applicationAvailable()Llamada justo después de instanciar el objeto QApplication. Usa esta función para realizar configuraciones que no requieran una instancia de QQmlEngine.Qt 5.12
void qmlEngineAvailable(QQmlEngine *)Llamada cuando el motor QML está disponible. Cualquier import paths, plugin paths, y extra file selectors habrán sido configurados en el motor en este punto.

Esta función se ejecuta una vez por cada archivo de prueba QML, por lo que los argumentos son exclusivos de esa prueba. Por ejemplo, esto significa que cada archivo de prueba QML tendrá su propio motor QML.

Esta función puede utilizarse para registrar tipos QML y add import paths, entre otras cosas.

Qt 5.11
void cleanupTestCase()Llamado justo después de la ejecución de la prueba ha terminado. Utiliza esta función para limpiar antes de que todo comience a ser destruido.Qt 5.12

El siguiente ejemplo demuestra cómo se puede utilizar la macro para establecer propiedades de contexto en el motor 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"

La inclusión .moc se basa en el nombre del archivo .cpp. Por ejemplo, en el ejemplo anterior, el archivo .cpp se llama src_qmltest_qquicktest.cpp. Si el archivo se llamara MyTest.cpp, el include sería:

#include "MyTest.moc"

Referencia

Licencias

Qt Quick Tests está disponible bajo licencias comerciales de The Qt Company. Además, está disponible bajo licencias de software libre. Desde Qt 5.4, estas licencias de software libre son GNU Lesser General Public License, versión 3, o GNU General Public License, versión 2. Vea Licencias de Qt para más detalles.

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