Kapitel 1: Schreiben eines Unit-Tests
In diesem ersten Kapitel wird gezeigt, wie man einen einfachen Unit-Test schreibt und wie man den Testfall als eigenständige ausführbare Datei ausführt.
Einen Test schreiben
Nehmen wir an, Sie wollen das Verhalten unserer Klasse QString testen. Zunächst benötigen Sie eine Klasse, die Ihre Testfunktionen enthält. Diese Klasse muss von QObject erben:
#include <QTest> class TestQString: public QObject { Q_OBJECT private slots: void toUpper(); };
Hinweis: Sie müssen den QTest Header einbinden und die Testfunktionen als private Slots deklarieren, damit das Testframework sie findet und ausführt.
Dann müssen Sie die Testfunktion selbst implementieren. Die Implementierung könnte wie folgt aussehen:
void TestQString::toUpper() { QString str = "Hello"; QVERIFY(str.toUpper() == "HELLO"); }
Das Makro QVERIFY() wertet den als Argument übergebenen Ausdruck aus. Wenn der Ausdruck wahr ist, wird die Ausführung der Testfunktion fortgesetzt. Andernfalls wird eine Fehlermeldung an das Testprotokoll angehängt, und die Testfunktion wird nicht weiter ausgeführt.
Wenn Sie jedoch eine ausführlichere Ausgabe in das Testprotokoll wünschen, sollten Sie stattdessen das Makro QCOMPARE() verwenden:
Wenn die Zeichenketten nicht gleich sind, wird der Inhalt beider Zeichenketten an das Testprotokoll angehängt, so dass sofort ersichtlich ist, warum der Vergleich fehlgeschlagen ist.
Vorbereiten der eigenständigen ausführbaren Datei
Um unseren Testfall in eine eigenständige ausführbare Datei zu verwandeln, sind die folgenden beiden Zeilen erforderlich:
QTEST_MAIN(TestQString)
#include "testqstring.moc"Das Makro QTEST_MAIN() wird zu einer einfachen Methode main(), die alle Testfunktionen ausführt. Beachten Sie, dass, wenn sowohl die Deklaration als auch die Implementierung unserer Testklasse in einer .cpp Datei stehen, wir auch die generierte moc Datei einschließen müssen, damit die Introspektion von Qt funktioniert.
Erstellen der ausführbaren Datei
Sie können die ausführbare Datei des Testfalls mit CMake oder qmake erstellen.
Bauen mit CMake
Konfigurieren Sie Ihre Build-Einstellungen in Ihrer CMakeLists.txt-Datei:
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(tutorial1 LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)
qt_standard_project_setup()
qt_add_executable(tutorial1
testqstring.cpp
)
set_target_properties(tutorial1 PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
target_link_libraries(tutorial1 PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Test
Qt6::Widgets
)
install(TARGETS tutorial1
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
qt_generate_deploy_app_script(
TARGET tutorial1
OUTPUT_SCRIPT deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})Führen Sie dann von der Kommandozeile aus entweder cmake aus oder verwenden Sie das Skript qt-cmake, das sich in Qt-prefix/<version>/<platform>/bin/qt-cmake befindet:
<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja
Führen Sie dann Ihr bevorzugtes Generatorwerkzeug aus, um die ausführbare Datei zu erstellen. Hier verwenden wir Ninja:
ninja
Bauen mit qmake
Konfigurieren Sie Ihre Build-Einstellungen in Ihrer .pro Datei:
QT += widgets testlib SOURCES = testqstring.cpp # install target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial1 INSTALLS += target
Führen Sie dann qmake und schließlich make aus, um Ihre ausführbare Datei zu erstellen:
qmake make
Hinweis: Wenn Sie Windows verwenden, ersetzen Sie make durch nmake oder das von Ihnen verwendete Build-Tool.
Ausführen der ausführbaren Datei
Wenn Sie die resultierende ausführbare Datei ausführen, sollten Sie die folgende Ausgabe erhalten:
********* Start testing of TestQString ********* Config: Using QtTest library %VERSION%, Qt %VERSION% PASS : TestQString::initTestCase() PASS : TestQString::toUpper() PASS : TestQString::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of TestQString *********
Herzlichen Glückwunsch! Sie haben soeben Ihren ersten Unit-Test unter Verwendung des Qt Test Frameworks geschrieben und ausgeführt.
© 2025 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.