Qt Quick Test
Einleitung
Qt Quick Test ist ein Unit-Test-Framework für QML-Anwendungen. Testfälle werden als JavaScript-Funktionen innerhalb eines Objekts vom Typ „ TestCase “ geschrieben:
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")
}
}Funktionen, deren Namen mit „ test_ “ beginnen, werden als auszuführende Testfälle behandelt. Weitere Informationen zum Schreiben von Testfällen finden Sie in der Dokumentation zu den Typen „ TestCase “ und „ SignalSpy “.
Hinweis: Für das Modul „ Qt Quick Test “besteht keine Garantie für binäre Kompatibilität. Das bedeutet, dass eine Anwendung, die „ Qt Quick Test “ verwendet, nur mit der Qt-Version funktioniert, für die sie entwickelt wurde. Die Quellkompatibilität ist jedoch gewährleistet.
Verwendung des Moduls
QML-API
Die QML-Typen in „ Qt Quick Test “ sind über den Import „ QtTest “ verfügbar. Um die Typen zu verwenden, fügen Sie die folgende Importanweisung in Ihre .qml-Datei ein:
import QtTestC++-API
Die Verwendung von „ C++ API “ erfordert die Verknüpfung mit der Modulbibliothek, entweder direkt oder über andere Abhängigkeiten. Mehrere Build-Tools bieten hierfür spezielle Unterstützung, darunter CMake und qmake.
Erstellen mit CMake
Verwenden Sie den Befehl „ find_package() “, um die benötigten Modulkomponenten im Qt6-Paket zu finden:
find_package(Qt6 REQUIRED COMPONENTS QuickTest)
target_link_libraries(mytarget PRIVATE Qt6::QuickTest)Siehe auch die Übersicht „Erstellen mit CMake “.
Erstellen mit qmake
Es gibt zwei Möglichkeiten, die entsprechende C++-Bibliothek einzubinden. Wenn Ihr Testprojekt eine QML- TestCase verwendet, sollte die folgende Zeile bereits in Ihrer Projektdatei enthalten sein:
CONFIG += qmltestcaseDadurch wird der Test mit der C++- QtQuickTest -Bibliothek verknüpft.
Wenn Sie ein reines C++-Testprojekt haben, können Sie die folgende Zeile zu Ihrer Projektdatei hinzufügen:
QT += qmltestTests ausführen
Testfälle werden von einem C++-Harness gestartet, der aus dem folgenden Code besteht:
#include <QtQuickTest>
QUICK_TEST_MAIN(example)Dabei ist „example“ die Kennung, mit der diese Testreihe eindeutig identifiziert wird.
Konfigurieren Sie Ihre „CMakeLists.txt“-Datei und erstellen Sie Ihr Projekt mit Ihrem bevorzugten Generator.
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
)Fügen Sie „ CONFIG += qmltestcase “ zu Ihrer Projektdatei hinzu:
TEMPLATE = app
TARGET = tst_example
CONFIG += warn_on qmltestcase
SOURCES += tst_example.cppWenn „ IMPORTPATH “ in Ihrer .pro-Datei angegeben ist, wird jeder zu „ IMPORTPATH “ hinzugefügte Importpfad als Befehlszeilenargument übergeben, wenn der Test mit „make check“ ausgeführt wird:
IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2Der Test-Harness durchsucht das angegebene Quellverzeichnis rekursiv nach „tst_*.qml“-Dateien. Ist „ QUICK_TEST_SOURCE_DIR “ nicht definiert, wird beim Ausführen des Harness das aktuelle Verzeichnis durchsucht. Für zusätzliche QML-Komponenten, die vom Test verwendet werden, können weitere *.qml-Dateien vorhanden sein.
Die Befehlszeilenoption „ -input “ kann zur Laufzeit gesetzt werden, um Testfälle aus einem anderen Verzeichnis auszuführen. Dies kann erforderlich sein, um Tests auf einem Zielgerät auszuführen, bei dem sich der kompilierte Verzeichnisname auf einen Host bezieht. Zum Beispiel:
tst_example -input /mnt/SDCard/qmltestsEs ist auch möglich, eine einzelne Datei mit der Option „ -input “ auszuführen. Beispiel:
tst_example -input data/test.qmltst_example -input <full_path>/test.qmlHinweis: Die Angabe des vollständigen Pfads zur QML-Testdatei ist beispielsweise für Shadow-Builds erforderlich.
Wenn Ihr Testfall QML-Importe benötigt, können Sie diese als „ -import “-Optionen zur Befehlszeile des Testprogramms hinzufügen.
Die Befehlszeilenoption „ -functions “ gibt eine Liste der aktuellen Testfunktionen zurück. Es ist möglich, eine einzelne Testfunktion auszuführen, indem man den Namen der Testfunktion als Argument angibt. Zum Beispiel:
tst_example Test_Name::function1Die Befehlszeilenoption „ -help “ gibt alle verfügbaren Optionen zurück.
tst_example -helpHinweis: Beim Ausführen eines „ Qt Quick “-Testfalls wird immer ein Fenster auf dem Bildschirm angezeigt, auch wenn der Testcode keine Quick-UI enthält. Um dies zu vermeiden, führen Sie die Testausführungsdatei mit „ -platform offscreen “ aus.
Ausführung von C++ vor QML-Tests
Um C++-Code auszuführen, bevor QML-Tests gestartet werden, kann das Makro „ QUICK_TEST_MAIN_WITH_SETUP “ verwendet werden. Dies kann unter anderem nützlich sein, um Kontexteigenschaften in der QML-Engine festzulegen.
Das Makro ist identisch mit „ QUICK_TEST_MAIN “, nimmt jedoch ein zusätzliches Typargument entgegen. Das Test-Framework ruft Slots und aufrufbare Funktionen mit den folgenden Namen auf:
| Name | Zweck | Seit |
|---|---|---|
void applicationAvailable() | Wird unmittelbar nach der Instanziierung des `QApplication`-Objekts aufgerufen. Verwenden Sie diese Funktion, um Vorbereitungen durchzuführen, für die keine ` QQmlEngine `-Instanz erforderlich ist. | Qt 5.12 |
void qmlEngineAvailable(QQmlEngine *) | Wird aufgerufen, sobald die QML-Engine verfügbar ist. Zu diesem Zeitpunkt sind alle Parameter ` import paths`, ` plugin paths` und ` extra file selectors ` bereits für die Engine festgelegt. Diese Funktion wird für jede QML-Testdatei einmal aufgerufen, sodass alle Argumente für diesen Test spezifisch sind. Das bedeutet beispielsweise, dass jede QML-Testdatei über eine eigene QML-Engine verfügt. Diese Funktion kann unter anderem dazu verwendet werden, QML-Typen und „ add import paths “ zu registrieren. | Qt 5.11 |
void cleanupTestCase() | Wird unmittelbar nach Abschluss der Testausführung aufgerufen. Verwenden Sie diese Funktion, um Aufräumarbeiten durchzuführen, bevor mit der Freigabe von Ressourcen begonnen wird. | Qt 5.12 |
Das folgende Beispiel veranschaulicht, wie das Makro verwendet werden kann, um Kontexteigenschaften in der QML-Engine festzulegen:
// 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"Die Einbindung von „ .moc “ basiert auf dem Dateinamen der Datei „ .cpp “. Im obigen Beispiel heißt die Datei „ .cpp “ beispielsweise „ src_qmltest_qquicktest.cpp “. Hieße die Datei „ MyTest.cpp “, würde die Einbindung wie folgt lauten:
#include "MyTest.moc"Referenz
Lizenzen
Qt Quick „Qt Test“ ist unter kommerziellen Lizenzen von The Qt Company erhältlich. Darüber hinaus ist es unter freien Softwarelizenzen verfügbar. Seit Qt 5.4 sind diese freien Softwarelizenzen die GNU Lesser General Public License, Version 3, oder die GNU General Public License, Version 2. Weitere Details finden Sie unter Qt-Lizenzierung.
© 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.