Kapitel 1: Einen Unit-Test schreiben
Dieses erste Kapitel zeigt, wie man einen einfachen Unit-Test schreibt und wie man den Testfall als eigenständiges Programm ausführt.
Einen Test schreiben
Nehmen wir an, Sie möchten 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 Header „ QTest “ einbinden und die Testfunktionen als private Slots deklarieren, damit das Test-Framework sie findet und ausführt.
Anschließend 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 „true“ ergibt, wird die Ausführung der Testfunktion fortgesetzt. Andernfalls wird dem Testprotokoll eine Meldung hinzugefügt, die den Fehler beschreibt, und die Ausführung der Testfunktion wird beendet.
Wenn Sie jedoch eine ausführlichere Ausgabe im Testprotokoll wünschen, sollten Sie stattdessen das Makro ` QCOMPARE()` verwenden:
Sind die Zeichenketten nicht identisch, werden die Inhalte beider Zeichenketten an das Testprotokoll angehängt, sodass sofort ersichtlich ist, warum der Vergleich fehlgeschlagen ist.
Vorbereitung der eigenständigen ausführbaren Datei
Um unseren Testfall schließlich zu einer eigenständigen ausführbaren Datei zu machen, sind die folgenden zwei Zeilen erforderlich:
QTEST_MAIN(TestQString)
#include "testqstring.moc"Das Makro ` QTEST_MAIN()` wird zu einer einfachen Methode ` main() ` erweitert, die alle Testfunktionen ausführt. Beachten Sie, dass, wenn sich sowohl die Deklaration als auch die Implementierung unserer Testklasse in einer ` .cpp `-Datei befinden, wir auch die generierte `moc`-Datei einbinden müssen, damit die Introspektion von Qt funktioniert.
Erstellen der ausführbaren Datei
Sie können die ausführbare Testdatei mit CMake oder qmake erstellen.
Erstellen 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 anschließend in der Befehlszeile entweder „ cmake “ aus oder verwenden Sie das Hilfsskript „ 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 NinjaFühren Sie anschließend Ihr bevorzugtes Generator-Tool aus, um die ausführbare Datei zu erstellen. Hier verwenden wir Ninja:
ninjaErstellen mit qmake
Konfigurieren Sie Ihre Build-Einstellungen in Ihrer Datei „ .pro “:
QT += widgets testlib
SOURCES = testqstring.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial1
INSTALLS += targetFühren Sie anschließend „ qmake “ aus und schließlich „ make “, um Ihre ausführbare Datei zu erstellen:
qmake
makeHinweis: 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 mit dem Qt Test -Framework geschrieben und ausgeführt.
© 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.