QTest Namespace

Der QTest-Namensraum enthält alle Funktionen und Deklarationen, die im Zusammenhang mit Qt Test stehen. Mehr...

Kopfzeile: #include <QTest>
CMake: find_package(Qt6 REQUIRED COMPONENTS Test)
target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib

Klassen

class QTouchEventSequence
(since 6.8) class ThrowOnFailDisabler
(since 6.8) class ThrowOnFailEnabler
(since 6.8) class ThrowOnSkipDisabler
(since 6.8) class ThrowOnSkipEnabler

Typen

enum KeyAction { Press, Release, Click, Shortcut }
enum MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove }
enum QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults }
enum TestFailMode { Abort, Continue }

Funktionen

void addColumn(const char *name, T *dummy = 0)
QTestData &addRow(const char *format, ...)
const char *benchmarkMetricName(QTest::QBenchmarkMetric metric)
const char *benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
QPointingDevice *createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)
const char *currentAppName()
const char *currentDataTag()
bool currentTestFailed()
const char *currentTestFunction()
(since 6.5) bool currentTestResolved()
(since 6.3) void failOnWarning(const QRegularExpression &messagePattern)
(since 6.8) void failOnWarning()
(since 6.3) void failOnWarning(const char *message)
void ignoreMessage(QtMsgType type, const char *message)
void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keySequence(QWidget *widget, const QKeySequence &keySequence)
void keySequence(QWindow *window, const QKeySequence &keySequence)
void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)
void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
QTestData &newRow(const char *dataTag)
int qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
int qExec(QObject *testObject, const QStringList &arguments)
QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName)
(since 6.5) void qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)
(since 6.7) void qSleep(std::chrono::milliseconds msecs)
void qSleep(int ms)
(since 6.7) void qWait(std::chrono::milliseconds msecs)
void qWait(int msecs)
(since 6.7) bool qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer(std::chrono::seconds{5}))
bool qWaitFor(Functor predicate, int timeout)
bool qWaitForWindowActive(QWidget *widget, int timeout = 5000)
bool qWaitForWindowActive(QWindow *window, int timeout = 5000)
bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
bool qWaitForWindowExposed(QWindow *window, int timeout = 5000)
(since 6.7) bool qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout = std::chrono::seconds{5})
(since 6.7) bool qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout = std::chrono::seconds{5})
void setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
(since 6.8) void setThrowOnFail(bool enable)
(since 6.8) void setThrowOnSkip(bool enable)
char *toHexRepresentation(const char *ba, qsizetype length)
char *toString(QSizePolicy sp)
char *toString(const T &value)
char *toString(const QVector4D &v)
char *toString(const std::pair<T1, T2> &pair)
char *toString(const std::tuple<Types...> &tuple)
char *toString(std::nullptr_t)
char *toString(QSizePolicy::ControlType ct)
char *toString(QSizePolicy::ControlTypes cts)
char *toString(QSizePolicy::Policy p)
char *toString(const QByteArray &ba)
char *toString(const QCborError &c)
char *toString(const QChar &character)
char *toString(const QDate &date)
char *toString(const QDateTime &dateTime)
(since 6.5) char *toString(const QKeySequence &ks)
char *toString(const QLatin1StringView &string)
char *toString(const QPoint &point)
char *toString(const QPointF &point)
char *toString(const QRect &rectangle)
char *toString(const QRectF &rectangle)
char *toString(const QSize &size)
char *toString(const QSizeF &size)
char *toString(const QString &string)
char *toString(const QStringView &string)
char *toString(const QTime &time)
char *toString(const QUrl &url)
char *toString(const QUuid &uuid)
char *toString(const QVariant &variant)
char *toString(const QVector2D &v)
char *toString(const QVector3D &v)
QTest::QTouchEventWidgetSequence touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
QTest::QTouchEventSequence touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)
(since 6.8) void wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase)

Makros

QBENCHMARK
QBENCHMARK_ONCE
QCOMPARE(tatsächlich, erwartet)
(since 6.4) QCOMPARE_EQ(berechnete, Basislinie)
(since 6.4) QCOMPARE_GE(berechnet, Basislinie)
(since 6.4) QCOMPARE_GT(berechnete, Basislinie)
(since 6.4) QCOMPARE_LE(berechnet, Basislinie)
(since 6.4) QCOMPARE_LT(berechnet, Basislinie) (berechnet, Basislinie)
(since 6.4) QCOMPARE_NE(berechnete, Basislinie)
QEXPECT_FAIL(DatenIndex, Kommentar, Modus)
QFAIL(Nachricht)
QFETCH(Typ, Name)
QFETCH_GLOBAL(Typ, Name)
QFINDTESTDATA(Dateiname)
QSKIP(Beschreibung)
QTEST(aktuell, testElement)
QTEST_APPLESS_MAIN(TestClass)
QTEST_GUILESS_MAIN(TestClass)
QTEST_MAIN(TestClass)
QTRY_COMPARE(tatsächlich, erwartet)
(since 6.4) QTRY_COMPARE_EQ(berechnete, Basislinie)
(since 6.4) QTRY_COMPARE_EQ_WITH_TIMEOUT(errechnet, Basislinie, Zeitüberschreitung)
(since 6.4) QTRY_COMPARE_GE(berechnet, Basislinie)
(since 6.4) QTRY_COMPARE_GE_WITH_TIMEOUT(berechnet, Basislinie, Zeitüberschreitung)
(since 6.4) QTRY_COMPARE_GT(berechnet, Basislinie)
(since 6.4) QTRY_COMPARE_GT_WITH_TIMEOUT(berechnet, Basislinie, Zeitüberschreitung)
(since 6.4) QTRY_COMPARE_LE(berechnet, Basislinie)
(since 6.4) QTRY_COMPARE_LE_WITH_TIMEOUT(berechnet, Basislinie, Zeitüberschreitung)
(since 6.4) QTRY_COMPARE_LT(berechnet, Basislinie)
(since 6.4) QTRY_COMPARE_LT_WITH_TIMEOUT(berechnet, Basislinie, Zeitüberschreitung)
(since 6.4) QTRY_COMPARE_NE(berechnet, Basislinie)
(since 6.4) QTRY_COMPARE_NE_WITH_TIMEOUT(berechnet, Basislinie, Zeitüberschreitung)
QTRY_COMPARE_WITH_TIMEOUT(tatsächlich, erwartet, Zeitüberschreitung)
QTRY_VERIFY2(Bedingung, Nachricht)
QTRY_VERIFY(Bedingung)
QTRY_VERIFY2_WITH_TIMEOUT(Bedingung, Nachricht, Zeitüberschreitung)
QTRY_VERIFY_WITH_TIMEOUT(Bedingung, Zeitüberschreitung)
QVERIFY2(Bedingung, Nachricht)
QVERIFY(Bedingung)
(since 6.3) QVERIFY_THROWS_EXCEPTION(Ausnahmetyp, ...)
(since 6.3) QVERIFY_THROWS_NO_EXCEPTION(...)

Detaillierte Beschreibung

Siehe die Qt Test Übersicht für Informationen über das Schreiben von Unit-Tests.

Klassen

Klasse QTouchEventSequence

Die Klasse QTouchEventSequence wird verwendet, um eine Sequenz von Berührungsereignissen zu simulieren. Mehr...

Klasse ThrowOnFailDisabler

class ThrowOnFailEnabler

class ThrowOnSkipDisabler

Klasse ThrowOnSkipEnabler

Typ Dokumentation

enum QTest::KeyAction

Diese Aufzählung beschreibt mögliche Aktionen für die Behandlung von Schlüsseln.

KonstanteWertBeschreibung
QTest::Press0Die Taste wird gedrückt.
QTest::Release1Die Taste wird losgelassen.
QTest::Click2Die Taste wird angeklickt (gedrückt und losgelassen).
QTest::Shortcut3Ein Tastaturkürzel ist aktiviert. Dieser Wert wurde in Qt 5.6 hinzugefügt.

enum QTest::MouseAction

Diese Aufzählung beschreibt mögliche Aktionen für die Mausbehandlung.

KonstanteWertBeschreibung
QTest::MousePress0Eine Maustaste wird gedrückt.
QTest::MouseRelease1Eine Maustaste wird losgelassen.
QTest::MouseClick2Eine Maustaste wird geklickt (gedrückt und losgelassen).
QTest::MouseDClick3Eine Maustaste wurde doppelt geklickt (zweimal gedrückt und losgelassen).
QTest::MouseMove4Der Mauszeiger hat sich bewegt.

enum QTest::QBenchmarkMetric

Diese Aufzählung listet alle Dinge auf, die mit einem Benchmarking bewertet werden können.

KonstanteWertBeschreibung
QTest::FramesPerSecond0Frames pro Sekunde
QTest::BitsPerSecond1Bits pro Sekunde
QTest::BytesPerSecond2Bytes pro Sekunde
QTest::WalltimeMilliseconds3Taktzeit in Millisekunden
QTest::WalltimeNanoseconds7Taktzeit in Nanosekunden
QTest::BytesAllocated8Speichernutzung in Bytes
QTest::Events6Anzahl der Ereignisse
QTest::CPUTicks4CPU-Zeit
QTest::CPUMigrations9Prozessmigrationen zwischen CPUs
QTest::CPUCycles10CPU-Zyklen
QTest::RefCPUCycles30Referenz-CPU-Zyklen
QTest::BusCycles11Bus-Zyklen
QTest::StalledCycles12Gestoppte Zyklen
QTest::InstructionReads5Gelesene Befehle
QTest::Instructions13Ausgeführte Befehle
QTest::BranchInstructions14Anweisungen vom Typ Verzweigung
QTest::BranchMisses15Verzweigungsbefehle, die falsch vorhergesagt wurden
QTest::CacheReferences16Cache-Zugriffe jeglicher Art
QTest::CacheMisses20Cache-Verfehlungen jeglicher Art
QTest::CacheReads17Cache-Lese-/Ladevorgänge
QTest::CacheReadMisses21Cache-Lese-/Lade-Fehlversuche
QTest::CacheWrites18Cache-Schreiben/Speichern
QTest::CacheWriteMisses22Cache-Schreiben/Speichern verfehlt
QTest::CachePrefetches19Cache-Prefetches
QTest::CachePrefetchMisses23Cache-Prefetch-Fehlversuche
QTest::ContextSwitches24Kontextwechsel
QTest::PageFaults25Alle Arten von Seitenfehlern
QTest::MinorPageFaults26Geringe Seitenfehler
QTest::MajorPageFaults27Große Seitenfehler
QTest::AlignmentFaults28Fehler aufgrund von Ausrichtungsfehlern
QTest::EmulationFaults29Fehler, die eine Software-Emulation erfordern

Beachten Sie, dass WalltimeNanoseconds und BytesAllocated nur für die Verwendung über setBenchmarkResult() zur Verfügung gestellt werden und die Ergebnisse in diesen Metriken nicht automatisch durch das QTest Framework bereitgestellt werden können.

Siehe auch QTest::benchmarkMetricName() und QTest::benchmarkMetricUnit().

enum QTest::TestFailMode

Diese Aufzählung beschreibt die Modi für die Behandlung einer Prüfung, z. B. durch die Makros QVERIFY() oder QCOMPARE(), von der bekannt ist, dass sie fehlschlägt. Der Modus gilt unabhängig davon, ob die Prüfung fehlschlägt oder erfolgreich ist.

KonstanteWertBeschreibung
QTest::Abort1Bricht die Ausführung des Tests ab. Verwenden Sie diesen Modus, wenn es keinen Sinn macht, den Test nach der problematischen Prüfung weiter auszuführen.
QTest::Continue2Setzt die Ausführung des Tests nach der problematischen Prüfung fort.

Siehe auch QEXPECT_FAIL().

Funktion Dokumentation

template <typename T> void QTest::addColumn(const char *name, T *dummy = 0)

Fügt eine Spalte mit dem Typ T zu den aktuellen Testdaten hinzu. name ist der Name der Spalte. dummy ist eine Abhilfe für fehlerhafte Compiler und kann ignoriert werden.

Um die Spalte mit Werten zu füllen, kann newRow() verwendet werden. Verwenden Sie QFETCH(), um die Daten im aktuellen Test abzurufen.

Beispiel:

    QTest::addColumn<int>("intval");
    QTest::addColumn<QString>("str");
    QTest::addColumn<double>("dbl");
    QTest::newRow("row1") << 1 << "hello" << 1.5;

Hinweis: Diese Funktion kann nur als Teil der Datenfunktion eines Tests verwendet werden, die von der Testumgebung aufgerufen wird.

Ein ausführlicheres Beispiel finden Sie unter Datengetriebenes Testen.

Siehe auch QTest::newRow(), QFETCH(), und QMetaType.

QTestData &QTest::addRow(const char *format, ...)

Hängt eine neue Zeile an die aktuellen Testdaten an.

Die Argumente der Funktion werden an std::snprintf() zur Formatierung gemäß format übergeben. In der Dokumentation zu std::snprintf() finden Sie Hinweise und Einschränkungen.

Die Testausgabe identifiziert den Testlauf mit diesen Testdaten anhand des Namens, der sich aus dieser Formatierung ergibt.

Gibt eine QTestData-Referenz zurück, die zum Einlesen von Daten verwendet werden kann, einen Wert für jede Spalte in der Tabelle.

Beispiel:

    QTest::addColumn<int>("input");
    QTest::addColumn<QString>("output");
    QTest::addRow("%d", 0) << 0 << QString("0");
    QTest::addRow("%d", 1) << 1 << QString("1");

Hinweis: Diese Funktion kann nur als Teil der Datenfunktion eines Tests aufgerufen werden, der vom Testframework aufgerufen wird.

Ein ausführlicheres Beispiel finden Sie unter Datengetriebenes Testen.

Siehe auch newRow(), addColumn(), und QFETCH().

const char *QTest::benchmarkMetricName(QTest::QBenchmarkMetric metric)

Gibt den Enum-Wert metric als Zeichenkette zurück.

const char *QTest::benchmarkMetricUnit(QTest::QBenchmarkMetric metric)

Gibt die Maßeinheiten für die angegebene metric zurück.

QPointingDevice *QTest::createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)

Erzeugt ein Dummy-Touch-Device vom Typ devType mit den Fähigkeiten caps zur Simulation von Touch-Events.

Das Touch-Gerät wird bei der Qt-Fenstersystemschnittstelle registriert. Sie sollten createTouchDevice() typischerweise verwenden, um eine QPointingDevice Membervariable in Ihrer Testfallklasse zu initialisieren, die gleiche Instanz für alle Tests zu verwenden und sie zu löschen, wenn sie nicht mehr benötigt wird.

Siehe auch QTest::QTouchEventSequence und touchEvent().

const char *QTest::currentAppName()

Gibt den Namen des Binärprogramms zurück, das gerade ausgeführt wird.

const char *QTest::currentDataTag()

Gibt den Namen der aktuellen Testdaten zurück. Wenn dem Test keine Testdaten zugeordnet sind, gibt die Funktion nullptr zurück.

bool QTest::currentTestFailed()

Gibt true zurück, wenn die aktuelle Testfunktion fehlgeschlagen ist, andernfalls false.

Siehe auch QTest::currentTestResolved().

const char *QTest::currentTestFunction()

Gibt den Namen der Testfunktion zurück, die gerade ausgeführt wird.

Beispiel:

void MyTestClass::cleanup()
{
    if (qstrcmp(QTest::currentTestFunction(), "myDatabaseTest") == 0) {
        // clean up all database connections
        closeAllDatabases();
    }
}

[since 6.5] bool QTest::currentTestResolved()

Gibt true zurück, wenn die aktuelle Testfunktion fehlgeschlagen ist oder übersprungen wurde.

Dies gilt, wenn der Test fehlgeschlagen ist oder übersprungen wurde. Wenn es wahr ist, sollte die Testfunktion frühzeitig zurückkehren. Insbesondere die Makros QTRY_* und die Test-Ereignisschleife beenden ihre Schleifen vorzeitig, wenn sie während der Testfunktion ausgeführt werden (aber nicht deren cleanup()). Nachdem ein Test eine Hilfsfunktion aufgerufen hat, die die Makros dieses Moduls verwendet, kann er diese Funktion verwenden, um zu testen, ob er frühzeitig zurückkehren soll.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch QTest::currentTestFailed().

[since 6.3] void QTest::failOnWarning(const QRegularExpression &messagePattern)

Hängt für jede Warnung, die mit messagePattern übereinstimmt, einen Testfehler an das Testprotokoll an.

Die Testfunktion wird weiter ausgeführt, wenn ein Fehler hinzugefügt wird. Um den Test stattdessen abzubrechen, können Sie currentTestFailed() überprüfen und frühzeitig zurückkehren, wenn es true ist.

Bei jeder Warnung führt das erste übereinstimmende Muster zu einem Fehler, die übrigen Muster werden ignoriert.

Alle Muster werden am Ende jeder Testfunktion gelöscht.

void FileTest::loadFiles() { QTest::failOnWarning(QRegularExpression("^Failed to load")); // Jedes dieser Muster führt zu einem Fehlschlag des Tests:    qWarning() << "Failed to load image";
    qWarning() << "Failed to load video";
}

Um jeden Test, der eine bestimmte Warnung auslöst, fehlschlagen zu lassen, übergeben Sie dieser Funktion in init() einen geeigneten regulären Ausdruck:

void FileTest::init()
{
    QTest::failOnWarning(
        QRegularExpression("QFile::.*: File(.*) already open"));
}

Für den allgemeinen Fall, dass der Test bei jeder Warnung fehlschlägt, übergeben Sie keinen Parameter:

void FileTest::init()
{
    QTest::failOnWarning();
}

Hinweis: ignoreMessage() hat Vorrang vor dieser Funktion, d. h. alle Warnungen, die einem Muster entsprechen, das sowohl ignoreMessage() als auch failOnWarning() übergeben wurde, werden ignoriert.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch QTEST_FATAL_FAIL.

[since 6.8] void QTest::failOnWarning()

Diese Funktion überlastet failOnWarning().

Hängt einen Testfehler an das Testprotokoll an, wenn eine Warnung ausgegeben wird.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch failOnWarning().

[since 6.3] void QTest::failOnWarning(const char *message)

Diese Funktion überlastet failOnWarning().

Hängt einen Testfehler an das Testprotokoll an, wenn die message ausgegeben wird.

Diese Funktion wurde in Qt 6.3 eingeführt.

Siehe auch failOnWarning().

void QTest::ignoreMessage(QtMsgType type, const char *message)

Ignoriert Meldungen, die von qDebug(), qInfo() oder qWarning() erstellt wurden. Wenn die message mit der entsprechenden type ausgegeben wird, wird sie aus dem Testprotokoll entfernt. Wenn der Test beendet wurde und die message nicht ausgegeben wurde, wird ein Testfehler an das Testprotokoll angehängt.

Hinweis: Wenn Sie diese Funktion aufrufen, wird nur eine Meldung ignoriert. Wenn die zu ignorierende Meldung zweimal ausgegeben wird, müssen Sie ignoreMessage() ebenfalls zweimal aufrufen.

Beispiel:

QDir dir;
QTest::ignoreMessage(QtWarningMsg, "QDir::mkdir: Empty or null file name(s)");
dir.mkdir("");

Das obige Beispiel testet, dass QDir::mkdir() die richtige Warnung ausgibt, wenn es mit einem ungültigen Dateinamen aufgerufen wird.

void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)

Dies ist eine überladene Funktion.

Ignoriert Meldungen, die von qDebug(), qInfo() oder qWarning() erzeugt wurden. Wenn die Nachricht, die messagePattern mit der entsprechenden type entspricht, ausgegeben wird, wird sie aus dem Testprotokoll entfernt. Wenn der Test beendet wurde und die Nachricht nicht ausgegeben wurde, wird ein Testfehler an das Testprotokoll angehängt.

Hinweis: Wenn Sie diese Funktion aufrufen, wird nur eine Meldung ignoriert. Wenn die zu ignorierende Nachricht zweimal ausgegeben wird, müssen Sie ignoreMessage() ebenfalls zweimal aufrufen.

void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Simuliert das Klicken von key mit einem optionalen modifier auf widget. Wenn delay größer als 0 ist, wartet der Test delay Millisekunden, bevor er die Taste anklickt.

Beispiele:

QTest::keyClick(myWidget, Qt::Key_Escape);

QTest::keyClick(myWidget, Qt::Key_Escape, Qt::ShiftModifier, 200);

Das erste Beispiel oben simuliert das Klicken der Taste escape auf myWidget ohne Tastaturmodifikatoren und ohne Verzögerung. Das zweite Beispiel simuliert das Klicken von shift-escape auf myWidget nach einer Verzögerung von 200 ms des Tests.

Siehe auch QTest::keyClicks().

void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Klicken von key mit einem optionalen modifier auf einem widget. Wenn delay größer als 0 ist, wartet der Test delay Millisekunden, bevor die Taste geklickt wird.

Beispiel:

QTest::keyClick(myWidget, 'a');

Das obige Beispiel simuliert das Klicken von a auf myWidget ohne jegliche Tastaturmodifikatoren und ohne Verzögerung des Tests.

Siehe auch QTest::keyClicks().

void QTest::keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Klicken von key mit einem optionalen modifier auf einem window. Wenn delay größer als 0 ist, wartet der Test delay Millisekunden, bevor die Taste geklickt wird.

Beispiele:

QTest::keyClick(&myWindow, Qt::Key_Escape);
QTest::keyClick(&myWindow, Qt::Key_Escape, Qt::ShiftModifier, 200);

Das erste Beispiel oben simuliert das Klicken der Taste escape auf myWindow ohne Tastaturmodifikatoren und ohne Verzögerung. Das zweite Beispiel simuliert das Klicken von shift-escape auf myWindow nach einer Verzögerung von 200 ms des Tests.

Siehe auch QTest::keyClicks().

void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Klicken von key mit einem optionalen modifier auf einem window. Wenn delay größer als 0 ist, wartet der Test delay Millisekunden, bevor die Taste geklickt wird.

Beispiel:

QWidget myWindow;
QTest::keyClick(&myWindow, Qt::Key_Tab);

Das obige Beispiel simuliert das Klicken von a auf myWindow ohne jegliche Tastaturmodifikatoren und ohne Verzögerung des Tests.

Siehe auch QTest::keyClicks().

void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Simuliert das Klicken einer sequence von Tasten auf einer widget. Optional kann eine Tastatur modifier sowie eine delay (in Millisekunden) des Tests vor jedem Tastenklick angegeben werden.

Beispiel:

QTest::keyClicks(myWidget, "hello world");

Das obige Beispiel simuliert das Anklicken der Tastenfolge "hello world" auf myWidget ohne jegliche Tastaturmodifikatoren und ohne Verzögerung des Tests.

Siehe auch QTest::keyClick().

void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Sendet ein Qt-Tastenereignis an widget mit dem angegebenen key und einem zugehörigen action. Optional kann eine Tastatur modifier angegeben werden, sowie ein delay (in Millisekunden) des Tests vor dem Senden des Ereignisses.

void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Sendet ein Qt-Tastenereignis an widget mit der angegebenen Taste ascii und einem zugehörigen action. Optional kann eine Tastatur modifier angegeben werden, sowie ein delay (in Millisekunden) des Tests vor dem Senden des Ereignisses.

void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Sendet ein Qt-Tastenereignis an window mit dem angegebenen key und einem zugehörigen action. Optional kann eine Tastatur modifier angegeben werden, sowie ein delay (in Millisekunden) des Tests vor dem Senden des Ereignisses.

void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Sendet ein Qt-Tastenereignis an window mit der angegebenen Taste ascii und einem zugehörigen action. Optional kann eine Tastatur modifier angegeben werden, sowie ein delay (in Millisekunden) des Tests vor dem Senden des Ereignisses.

void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Simuliert das Drücken einer key mit einer optionalen modifier auf einer widget. Wenn delay größer als 0 ist, wartet der Test auf delay Millisekunden, bevor die Taste gedrückt wird.

Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit keyRelease() loslassen.

Siehe auch QTest::keyRelease() und QTest::keyClick().

void QTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Drücken einer key mit einer optionalen modifier auf einer widget. Wenn delay größer als 0 ist, wartet der Test für delay Millisekunden, bevor die Taste gedrückt wird.

Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit keyRelease() loslassen.

Siehe auch QTest::keyRelease() und QTest::keyClick().

void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Drücken einer key mit einer optionalen modifier auf einer window. Wenn delay größer als 0 ist, wartet der Test für delay Millisekunden, bevor die Taste gedrückt wird.

Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit keyRelease() loslassen.

Siehe auch QTest::keyRelease() und QTest::keyClick().

void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Drücken einer key mit einer optionalen modifier auf einer window. Wenn delay größer als 0 ist, wartet der Test für delay Millisekunden, bevor die Taste gedrückt wird.

Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit keyRelease() loslassen.

Siehe auch QTest::keyRelease() und QTest::keyClick().

void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Simuliert die Freigabe eines key mit einem optionalen modifier auf einem widget. Wenn delay größer als 0 ist, wartet der Test auf delay Millisekunden, bevor er den Schlüssel freigibt.

Siehe auch QTest::keyPress() und QTest::keyClick().

void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert die Freigabe eines key mit einem optionalen modifier auf einem widget. Wenn delay größer als 0 ist, wartet der Test auf delay Millisekunden, bevor er den Schlüssel freigibt.

Siehe auch QTest::keyClick().

void QTest::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert die Freigabe eines key mit einem optionalen modifier auf einem window. Wenn delay größer als 0 ist, wartet der Test auf delay Millisekunden, bevor er den Schlüssel freigibt.

Siehe auch QTest::keyPress() und QTest::keyClick().

void QTest::keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Dies ist eine überladene Funktion.

Simuliert die Freigabe eines key mit einem optionalen modifier auf einem window. Wenn delay größer als 0 ist, wartet der Test auf delay Millisekunden, bevor er den Schlüssel freigibt.

Siehe auch QTest::keyClick().

void QTest::keySequence(QWidget *widget, const QKeySequence &keySequence)

Dies ist eine überladene Funktion.

Simuliert die Eingabe von keySequence in eine widget.

Siehe auch QTest::keyClick() und QTest::keyClicks().

void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)

Dies ist eine überladene Funktion.

Simuliert die Eingabe von keySequence in eine window.

Siehe auch QTest::keyClick() und QTest::keyClicks().

void QTest::mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Simuliert das Klicken einer Maus button mit einem optionalen modifier auf einem widget. Die Position des Klicks wird durch pos definiert; die Standardposition ist die Mitte des Widgets. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden, bevor die Taste gedrückt wird und bevor sie losgelassen wird.

Siehe auch QTest::mousePress() und QTest::mouseRelease().

void QTest::mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Dies ist eine überladene Funktion.

Simuliert einen Mausklick button mit einem optionalen stateKey Modifikator auf einem window. Die Position des Klicks wird durch pos definiert; die Standardposition ist die Mitte des Fensters. Wenn delay angegeben wird, wartet der Test die angegebene Anzahl von Millisekunden, bevor die Taste gedrückt wird und bevor sie losgelassen wird.

Siehe auch QTest::mousePress() und QTest::mouseRelease().

void QTest::mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Simuliert den Doppelklick einer Maus button mit einem optionalen modifier auf einem widget. Die Position des Klicks wird durch pos definiert; die Standardposition ist die Mitte des Widgets. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden vor jedem Drücken und Loslassen.

Siehe auch QTest::mouseClick().

void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Dies ist eine überladene Funktion.

Simuliert den Doppelklick einer Maus button mit einem optionalen stateKey Modifikator auf einem window. Die Position des Klicks wird durch pos definiert; die Standardposition ist die Mitte des Fensters. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden vor jedem Drücken und Loslassen.

Siehe auch QTest::mouseClick().

void QTest::mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)

Bewegt den Mauszeiger auf eine widget. Wenn pos nicht angegeben wird, bewegt sich der Mauszeiger in die Mitte des Widgets. Wenn eine delay (in Millisekunden) angegeben wird, wartet der Test, bevor der Mauszeiger bewegt wird.

void QTest::mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)

Dies ist eine überladene Funktion.

Bewegt den Mauszeiger auf eine window. Wenn pos nicht angegeben wird, bewegt sich der Mauszeiger in die Mitte des Fensters. Wenn eine delay (in Millisekunden) angegeben wird, wartet der Test, bevor der Mauszeiger bewegt wird.

void QTest::mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Simuliert das Drücken einer Maus button mit einem optionalen modifier auf einem widget. Die Position wird durch pos definiert; die Standardposition ist die Mitte des Widgets. Wenn delay angegeben ist, wartet der Test auf die angegebene Anzahl von Millisekunden, bevor die Taste gedrückt wird.

Siehe auch QTest::mouseRelease() und QTest::mouseClick().

void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Drücken einer Maus button mit einem optionalen stateKey Modifikator auf einem window. Die Position wird durch pos definiert; die Standardposition ist die Mitte des Fensters. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden, bevor die Taste gedrückt wird.

Siehe auch QTest::mouseRelease() und QTest::mouseClick().

void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Simuliert das Loslassen einer Maus button mit einem optionalen modifier auf einem widget. Die Position des Loslassens wird durch pos definiert; die Standardposition ist die Mitte des Widgets. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden, bevor er die Taste loslässt; andernfalls wartet er eine Standardzeit (1 ms), die über Befehlszeilenargumente überschrieben werden kann.

Hinweis: Wenn Sie einen Doppelklick testen möchten, indem Sie die Ereignisse einzeln senden, geben Sie eine kurze Verzögerung, die größer ist als die Standardeinstellung, für beide Mausfreigabeereignisse an. Die Summe der Verzögerungen für das Drücken, Loslassen, Drücken und Loslassen muss kleiner sein als QStyleHints::mouseDoubleClickInterval(). Wenn Sie den Zustand zwischen den Ereignissen nicht überprüfen müssen, ist es besser, QTest::mouseDClick() zu verwenden.

QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);

Siehe auch QTest::mousePress() und QTest::mouseClick().

void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)

Dies ist eine überladene Funktion.

Simuliert das Loslassen einer Maustaste button mit einem optionalen stateKey Modifikator auf einem window. Die Position des Loslassens wird durch pos definiert; die Standardposition ist die Mitte des Fensters. Wenn delay angegeben ist, wartet der Test die angegebene Anzahl von Millisekunden, bevor er die Taste loslässt; andernfalls wartet er eine Standardzeit (1 ms), die über Befehlszeilenargumente überschrieben werden kann.

Hinweis: Wenn Sie einen Doppelklick testen möchten, indem Sie die Ereignisse einzeln senden, geben Sie eine kurze Verzögerung, die größer ist als die Standardeinstellung, für beide Mausfreigabeereignisse an. Die Summe der Verzögerungen für das Drücken, Loslassen, Drücken und Loslassen muss kleiner sein als QStyleHints::mouseDoubleClickInterval(). Wenn Sie den Zustand zwischen den Ereignissen nicht überprüfen müssen, ist es besser, QTest::mouseDClick() zu verwenden.

QSignalSpy doubleClickSpy(target, &TargetClass::doubleClicked);
const QPoint p(1, 2);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p);
QVERIFY(target.isPressed());
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.isPressed(), false);
QTest::mousePress(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(target.pressCount(), 2);
QTest::mouseRelease(&myWindow, Qt::LeftButton, Qt::NoModifier, p, 10);
QCOMPARE(doubleClickSpy.count(), 1);

Siehe auch QTest::mousePress() und QTest::mouseClick().

QTestData &QTest::newRow(const char *dataTag)

Hängt eine neue Zeile an die aktuellen Testdaten an.

In der Testausgabe wird der Testlauf mit diesen Testdaten mit dem Namen dataTag gekennzeichnet.

Gibt eine QTestData-Referenz zurück, die zum Streamen von Daten verwendet werden kann, einen Wert für jede Spalte in der Tabelle.

Beispiel:

void MyTestClass::addSingleStringRows()
{
    QTest::addColumn<QString>("aString");
    QTest::newRow("just.hello") << QString("hello");
    QTest::newRow("a.null.string") << QString();
}

Hinweis: Diese Funktion kann nur als Teil der Datenfunktion eines Tests aufgerufen werden, der vom Testframework aufgerufen wird.

Ein ausführlicheres Beispiel finden Sie unter Datengetriebenes Testen.

Siehe auch addRow(), addColumn(), und QFETCH().

int QTest::qExec(QObject *testObject, int argc = 0, char **argv = nullptr)

Führt Tests aus, die in testObject deklariert sind. Zusätzlich werden die privaten Slots initTestCase(), cleanupTestCase(), init() und cleanup() ausgeführt, falls sie existieren. Siehe Erstellen eines Tests für weitere Details.

Optional können die Befehlszeilenargumente argc und argv angegeben werden. Eine Liste der anerkannten Argumente finden Sie unter Qt Test Befehlszeilenargumente.

Im folgenden Beispiel werden alle Tests in MyTestObject ausgeführt:

MyTestObject test1;
QTest::qExec(&test1);

Diese Funktion gibt 0 zurück, wenn keine Tests fehlgeschlagen sind, oder einen Wert ungleich 0, wenn ein oder mehrere Tests fehlgeschlagen sind oder wenn unbehandelte Ausnahmen aufgetreten sind. (Übersprungene Tests haben keinen Einfluss auf den Rückgabewert.)

Für eigenständige Testanwendungen kann das Makro QTEST_MAIN() verwendet werden, um eine main()-Funktion zu deklarieren, die die Befehlszeilenargumente analysiert und die Tests ausführt, so dass diese Funktion nicht explizit aufgerufen werden muss.

Der Rückgabewert dieser Funktion ist auch der Exit-Code der Testanwendung, wenn das Makro QTEST_MAIN() verwendet wird.

Bei eigenständigen Testanwendungen sollte diese Funktion nicht mehr als einmal aufgerufen werden, da sich die Befehlszeilenoptionen für die Protokollierung der Testausgabe in Dateien und die Ausführung einzelner Testfunktionen nicht korrekt verhalten.

Hinweis: Diese Funktion ist nicht reentrant, es kann immer nur ein Test gleichzeitig ausgeführt werden. Ein Test, der mit qExec() ausgeführt wurde, kann keinen anderen Test über qExec() ausführen und Threads dürfen qExec() nicht gleichzeitig aufrufen.

Wenn Sie die Argumente programmatisch erstellt haben, anstatt sie von den Argumenten in main() zu erhalten, ist es wahrscheinlich von Interesse, QTest::qExec(QObject *, const QStringList &) zu verwenden, da es Unicode-sicher ist.

Siehe auch QTEST_MAIN(), QTEST_GUILESS_MAIN(), und QTEST_APPLESS_MAIN().

int QTest::qExec(QObject *testObject, const QStringList &arguments)

Dies ist eine überladene Funktion.

Verhält sich identisch zu qExec(QObject *, int, char**), nimmt aber eine QStringList von arguments statt einer char** Liste.

QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)

Extrahiert ein Verzeichnis aus den Ressourcen auf die Festplatte. Der Inhalt wird rekursiv in einen temporären Ordner extrahiert. Der extrahierte Inhalt wird automatisch entfernt, sobald der letzte Verweis auf den Rückgabewert den Anwendungsbereich verlässt.

dirName ist der Name des Verzeichnisses, das aus den Ressourcen extrahiert werden soll.

Gibt das temporäre Verzeichnis zurück, in das die Daten extrahiert wurden, oder null im Falle eines Fehlers.

[since 6.5] void QTest::qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)

Registriert den Test name, mit der Eingabefunktion entryFunction, in einem zentralen Testfallregister für das aktuelle Binary.

name wird aufgelistet, wenn das Batch-Test-Binary ohne Parameter ausgeführt wird. Das Ausführen des Testbinärs mit argv[1] von name führt dazu, dass entryFunction aufgerufen wird.

Diese Funktion wurde in Qt 6.5 eingeführt.

[since 6.7] void QTest::qSleep(std::chrono::milliseconds msecs)

Schläft für msecs und blockiert die Ausführung des Tests.

Diese Methode führt keine Ereignisverarbeitung durch und lässt Ihren Test nicht reagieren. Die Netzwerkkommunikation kann während des Ruhezustands unterbrochen werden. Verwenden Sie QTest::qWait(), um eine nicht-blockierende Schlafphase durchzuführen.

msecs muss größer als 0ms sein.

Hinweis: Ab Qt 6.7 ist diese Funktion mit std::this_thread::sleep_for implementiert, so dass die Genauigkeit der verbrauchten Zeit von der Implementierung der Standardbibliothek abhängt. Vor Qt 6.7 rief diese Funktion entweder nanosleep() unter Unix oder Sleep() unter Windows auf, so dass die Genauigkeit der Zeit, die in dieser Funktion verbracht wurde, vom Betriebssystem abhing.

Beispiel:

using namespace std::chrono_literals;
QTest::qSleep(250ms);

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch QTest::qWait().

void QTest::qSleep(int ms)

Dies ist eine überladene Funktion.

Schläft für ms Millisekunden und blockiert die Ausführung des Tests.

Äquivalent zum Aufruf:

QTest::qSleep(std::chrono::milliseconds{ms});

[since 6.7] void QTest::qWait(std::chrono::milliseconds msecs)

Wartet auf msecs. Während des Wartens werden Ereignisse verarbeitet, und Ihr Test reagiert weiterhin auf Ereignisse der Benutzeroberfläche oder Netzwerkkommunikation.

Beispiel:

    using namespace std::chrono_literals;
    int i = 0;
    while (myNetworkServerNotResponding() && i++ < 50)
        QTest::qWait(250ms);

Der obige Code wartet, bis der Netzwerkserver für maximal 12,5 Sekunden antwortet.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch QTest::qSleep() und QSignalSpy::wait().

void QTest::qWait(int msecs)

Dies ist eine überladene Funktion.

Wartet auf msecs. Äquivalent zum Aufruf:

QTest::qWait(std::chrono::milliseconds{msecs});

[since 6.7] template <typename Functor> bool QTest::qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer(std::chrono::seconds{5}))

Wartet, bis deadline abgelaufen ist, oder bis predicate true zurückgibt, je nachdem, was zuerst eintritt.

Gibt true zurück, wenn predicate zu irgendeinem Zeitpunkt true zurückgegeben hat, andernfalls false.

Beispiel:

    MyObject obj;
    obj.startup();
    using namespace std::chrono_literals;
    const bool result = QTest::qWaitFor([&obj]() { return obj.isReady(); },
                                        QDeadlineTimer(3s));

Der obige Code wartet darauf, dass das Objekt bereit ist, maximal drei Sekunden lang.

Diese Funktion wurde in Qt 6.7 eingeführt.

template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)

Dies ist eine überladene Funktion.

Wartet timeout Millisekunden oder bis die predicate true zurückgibt.

Dies ist gleichbedeutend mit dem Aufruf:

qWaitFor(predicate, QDeadlineTimer(timeout));

bool QTest::qWaitForWindowActive(QWidget *widget, int timeout = 5000)

Gibt true zurück, wenn widget innerhalb von timeout Millisekunden aktiv ist. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWidget::show() aufrufen und sich darauf verlassen, dass das Widget tatsächlich aktiv ist (d. h. sichtbar ist und den Fokus hat), bevor sie fortfahren.

Hinweis: Die Methode bricht ab und gibt false zurück, wenn ein anderes Fenster verhindert, dass widget aktiv wird.

Hinweis: Da der Fokus eine exklusive Eigenschaft ist, kann widget seinen Fokus jederzeit an ein anderes Fenster verlieren - auch nachdem die Methode true zurückgegeben hat.

Siehe auch qWaitForWindowExposed() und QWidget::isActiveWindow().

bool QTest::qWaitForWindowActive(QWindow *window, int timeout = 5000)

Gibt true zurück, wenn window innerhalb von timeout Millisekunden aktiv ist. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWindow::show() aufrufen und sich darauf verlassen, dass das Fenster tatsächlich aktiv ist (d. h. sichtbar ist und den Fokus hat), bevor sie fortgesetzt werden.

Hinweis: Die Methode bricht ab und gibt false zurück, wenn ein anderes Fenster verhindert, dass window aktiv wird.

Hinweis: Da der Fokus eine exklusive Eigenschaft ist, kann window seinen Fokus jederzeit an ein anderes Fenster verlieren - auch nachdem die Methode true zurückgegeben hat.

Siehe auch qWaitForWindowExposed(), qWaitForWindowFocused(), und QWindow::isActive().

bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)

Gibt true zurück, wenn widget innerhalb von timeout Millisekunden ausgesetzt wird. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWidget::show() aufrufen und sich darauf verlassen, dass das Widget tatsächlich sichtbar ist, bevor sie fortfahren.

Hinweis: Ein Fenster, das auf den Bildschirm abgebildet wird, kann immer noch nicht als sichtbar betrachtet werden, wenn der Client-Bereich des Fensters nicht sichtbar ist, z. B. weil er vollständig von anderen Fenstern verdeckt wird. In solchen Fällen wird die Methode abgebrochen und false zurückgegeben.

Siehe auch qWaitForWindowActive(), QWidget::isVisible(), und QWindow::isExposed().

bool QTest::qWaitForWindowExposed(QWindow *window, int timeout = 5000)

Gibt true zurück, wenn window innerhalb von timeout Millisekunden ausgesetzt wird. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWindow::show() aufrufen und sich darauf verlassen, dass das Fenster tatsächlich sichtbar ist, bevor sie fortfahren.

Hinweis: Ein Fenster, das auf den Bildschirm abgebildet wird, kann immer noch nicht als sichtbar betrachtet werden, wenn der Client-Bereich des Fensters nicht sichtbar ist, z. B. weil er vollständig von anderen Fenstern verdeckt wird. In solchen Fällen wird die Methode abgebrochen und false zurückgegeben.

Siehe auch qWaitForWindowActive() und QWindow::isExposed().

[since 6.7] bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout = std::chrono::seconds{5})

Gibt true zurück, wenn widget das Fokusfenster innerhalb von timeout ist. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWidget::show() aufrufen und sich darauf verlassen, dass das Widget den Fokus hat (um z. B. Tastaturereignisse zu empfangen), bevor sie fortfahren.

Hinweis: Die Methode bricht ab und gibt false zurück, wenn ein anderes Fenster verhindert, dass widget fokussiert wird.

Hinweis: Da der Fokus eine exklusive Eigenschaft ist, kann widget seinen Fokus jederzeit an ein anderes Fenster verlieren - auch nachdem die Methode true zurückgegeben hat.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch qWaitForWindowExposed(), qWaitForWindowActive(), und QGuiApplication::focusWindow().

[since 6.7] bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout = std::chrono::seconds{5})

Gibt true zurück, wenn window das Fokusfenster innerhalb von timeout ist. Andernfalls wird false zurückgegeben.

Die Methode ist nützlich in Tests, die QWindow::show() aufrufen und sich darauf verlassen, dass das Fenster den Fokus hat (um z. B. Tastaturereignisse zu empfangen), bevor sie fortfahren.

Hinweis: Die Methode bricht ab und gibt false zurück, wenn ein anderes Fenster verhindert, dass window fokussiert wird.

Hinweis: Da der Fokus eine exklusive Eigenschaft ist, kann window seinen Fokus jederzeit an ein anderes Fenster verlieren - auch nachdem die Methode true zurückgegeben hat.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch qWaitForWindowExposed(), qWaitForWindowActive(), und QGuiApplication::focusWindow().

void QTest::setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)

Setzt das Benchmark-Ergebnis für diese Testfunktion auf result.

Verwenden Sie diese Funktion, wenn Sie Benchmark-Ergebnisse ohne Verwendung des QBENCHMARK-Makros melden möchten. Verwenden Sie metric, um anzugeben, wie Qt Test die Ergebnisse interpretieren soll.

Der Kontext für das Ergebnis ist der Name der Testfunktion und ein Daten-Tag aus der Funktion _data. Diese Funktion kann in jeder Testfunktion nur einmal aufgerufen werden, nachfolgende Aufrufe ersetzen die zuvor gemeldeten Ergebnisse.

Beachten Sie, dass das Befehlszeilenargument -iterations keine Auswirkungen auf Testfunktionen ohne das Makro QBENCHMARK hat.

[noexcept, since 6.8] void QTest::setThrowOnFail(bool enable)

Aktiviert (enable = true) oder deaktiviert ( enable = false) das Werfen bei QCOMPARE()/QVERIFY() Fehlschlägen (im Gegensatz zu einer einfachen Rückkehr aus dem unmittelbar umgebenden Funktionskontext).

Die Funktion ist referenzgezählt: Wenn Sie diese Funktion N-mal mit true aufrufen, müssen Sie sie N-mal mit false aufrufen, um an den Ausgangspunkt zurückzukehren.

Die Vorgabe ist false, es sei denn, die Umgebungsvariable QTEST_THROW_ON_FAIL ist gesetzt.

Dieser Aufruf hat keinen Effekt, wenn das QTEST_THROW_ON_FAIL C++ Makro definiert ist.

Hinweis: Sie müssen Ihre Tests mit aktivierten Ausnahmen kompilieren, um diese Funktion nutzen zu können.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch setThrowOnSkip(), ThrowOnFailEnabler, ThrowOnFailDisabler, und QTEST_THROW_ON_FAIL.

[noexcept, since 6.8] void QTest::setThrowOnSkip(bool enable)

Aktiviert (enable = true) oder deaktiviert ( enable = false) das Werfen auf QSKIP() (im Gegensatz zu einer einfachen Rückkehr aus dem unmittelbar umgebenden Funktionskontext).

Die Funktion ist referenzgezählt: Wenn Sie diese Funktion N-mal mit true aufrufen, müssen Sie sie N-mal mit false aufrufen, um an den Ausgangspunkt zurückzukehren.

Die Vorgabe ist false, es sei denn, die Umgebungsvariable QTEST_THROW_ON_SKIP ist gesetzt.

Dieser Aufruf hat keinen Effekt, wenn das QTEST_THROW_ON_SKIP C++ Makro definiert ist.

Hinweis: Sie müssen Ihre Tests mit aktivierten Ausnahmen kompilieren, um diese Funktion nutzen zu können.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch setThrowOnFail(), ThrowOnSkipEnabler, ThrowOnSkipDisabler, und QTEST_THROW_ON_SKIP.

char *QTest::toHexRepresentation(const char *ba, qsizetype length)

Gibt einen Zeiger auf eine Zeichenfolge zurück, bei der es sich um die Zeichenfolge ba handelt, die als durch Leerzeichen getrennte Folge von Hex-Zeichen dargestellt wird. Wenn die Eingabe als zu lang angesehen wird, wird sie abgeschnitten. Eine Kürzung wird in der zurückgegebenen Zeichenkette durch eine Ellipse am Ende angezeigt. Der Aufrufer ist Eigentümer des zurückgegebenen Zeigers und muss sicherstellen, dass er später an den Operator delete[] übergeben wird.

length ist die Länge der Zeichenkette ba.

char *toString(QSizePolicy sp)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der Größenrichtlinie sp zurück.

template <typename T> char *QTest::toString(const T &value)

Gibt eine textuelle Darstellung von value zurück. Diese Funktion wird von QCOMPARE() verwendet, um im Falle eines Testfehlers ausführliche Informationen auszugeben.

Sie können Spezialisierungen oder Überladungen dieser Funktion zu Ihrem Test hinzufügen, um eine ausführliche Ausgabe zu ermöglichen.

Hinweis: Ab Qt 5.5 sollten Sie es vorziehen, eine toString()-Funktion im Namespace des Typs bereitzustellen, anstatt diese Vorlage zu spezialisieren. Wenn Ihr Code weiterhin mit der QTestLib von Qt 5.4 oder früher arbeiten soll, müssen Sie weiterhin die Spezialisierung verwenden.

Hinweis: Der Aufrufer von toString() muss die zurückgegebenen Daten mit delete[] löschen. Ihre Implementierung sollte einen mit new[] oder qstrdup() erstellten String zurückgeben. Am einfachsten ist es, eine QByteArray oder QString zu erstellen und QTest::toString() darauf aufzurufen (siehe zweites Beispiel unten).

Beispiel für Spezialisierung (Qt ≤ 5.4):

namespace QTest {
    template<>
    char *toString(const MyPoint &point)
    {
        const QByteArray ba("MyPoint("
                            + QByteArray::number(point.x()) + ", "
                            + QByteArray::number(point.y()) + ')');
        return qstrdup(ba.data());
    }
}

Das obige Beispiel definiert eine toString()-Spezialisierung für eine Klasse namens MyPoint. Immer wenn ein Vergleich zweier Instanzen von MyPoint fehlschlägt, ruft QCOMPARE() diese Funktion auf, um den Inhalt von MyPoint in das Testprotokoll auszugeben.

Gleiches Beispiel, aber mit Überladung (Qt ≥ 5.5):

namespace {
    char *toString(const MyPoint &point)
    {
        return QTest::toString("MyPoint(" +
                               QByteArray::number(point.x()) + ", " +
                               QByteArray::number(point.y()) + ')');
    }
}

Siehe auch QCOMPARE().

char *QTest::toString(const QVector4D &v)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des 4D-Vektors v zurück.

template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der pair zurück.

template <typename... Types> char *QTest::toString(const std::tuple<Types...> &tuple)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen tuple zurück.

char *QTest::toString(std::nullptr_t)

Dies ist eine überladene Funktion.

Gibt eine Zeichenkette zurück, die nullptr enthält.

char *toString(QSizePolicy::ControlType ct)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des Kontrolltyps ct zurück.

char *toString(QSizePolicy::ControlTypes cts)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der Kontrolltypen cts zurück.

char *toString(QSizePolicy::Policy p)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der Richtlinie p zurück.

char *QTest::toString(const QByteArray &ba)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des Byte-Arrays ba zurück.

Siehe auch QTest::toHexRepresentation().

char *QTest::toString(const QCborError &c)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des angegebenen CBOR-Fehlers c zurück.

char *QTest::toString(const QChar &character)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen character zurück.

char *QTest::toString(const QDate &date)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen date zurück.

char *QTest::toString(const QDateTime &dateTime)

Dies ist eine überladene Funktion.

Gibt eine Textdarstellung des durch dateTime angegebenen Datums und der Uhrzeit zurück.

[since 6.5] char *QTest::toString(const QKeySequence &ks)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der Tastenfolge ks zurück.

Diese Funktion wurde in Qt 6.5 eingeführt.

char *QTest::toString(const QLatin1StringView &string)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen string zurück.

char *QTest::toString(const QPoint &point)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen point zurück.

char *QTest::toString(const QPointF &point)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen point zurück.

char *QTest::toString(const QRect &rectangle)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen rectangle zurück.

char *QTest::toString(const QRectF &rectangle)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen rectangle zurück.

char *QTest::toString(const QSize &size)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen size zurück.

char *QTest::toString(const QSizeF &size)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen size zurück.

char *QTest::toString(const QString &string)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen string zurück.

char *QTest::toString(const QStringView &string)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen string zurück.

char *QTest::toString(const QTime &time)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen time zurück.

char *QTest::toString(const QUrl &url)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen url zurück.

char *QTest::toString(const QUuid &uuid)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen uuid zurück.

char *QTest::toString(const QVariant &variant)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung der angegebenen variant zurück.

char *QTest::toString(const QVector2D &v)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des 2D-Vektors v zurück.

char *QTest::toString(const QVector3D &v)

Dies ist eine überladene Funktion.

Gibt eine textuelle Darstellung des 3D-Vektors v zurück.

QTest::QTouchEventWidgetSequence QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)

Erzeugt ein QTouchEventSequence für device und gibt es zurück, um Ereignisse für widget zu simulieren.

Beim Hinzufügen von Berührungsereignissen zur Sequenz wird widget auch verwendet, um die angegebene Position in Bildschirmkoordinaten zu übersetzen, sofern kein anderes Widget in den jeweiligen Aufrufen von press(), move() usw. angegeben wird.

Die Berührungsereignisse werden an das Ereignissystem übergeben, wenn der Destruktor von QTouchEventSequence aufgerufen wird (d. h. wenn das zurückgegebene Objekt den Gültigkeitsbereich verlässt), es sei denn, autoCommit ist auf false gesetzt. Wenn autoCommit false ist, muss commit() manuell aufgerufen werden.

createTouchDevice() kann aufgerufen werden, um ein Test-Touch-Gerät zur Verwendung mit dieser Funktion zu erstellen.

QTest::QTouchEventSequence QTest::touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)

Erzeugt und gibt ein QTouchEventSequence für device zurück, um Ereignisse für window zu simulieren.

Beim Hinzufügen von Berührungsereignissen zur Sequenz wird window auch verwendet, um die angegebene Position in Bildschirmkoordinaten zu übersetzen, sofern in den jeweiligen Aufrufen von press(), move() usw. kein anderes Fenster angegeben wird.

Die Berührungsereignisse werden an das Ereignissystem übergeben, wenn der Destruktor von QTouchEventSequence aufgerufen wird (d. h. wenn das zurückgegebene Objekt den Gültigkeitsbereich verlässt), es sei denn, autoCommit ist auf false gesetzt. Wenn autoCommit false ist, muss commit() manuell aufgerufen werden.

createTouchDevice() kann aufgerufen werden, um ein Test-Touch-Gerät zur Verwendung mit dieser Funktion zu erstellen.

[since 6.8] void QTest::wheelEvent(QWindow *window, QPointF pos, QPoint angleDelta, QPoint pixelDelta = QPoint(0, 0), Qt::KeyboardModifiers stateKey = Qt::NoModifier, Qt::ScrollPhase phase = Qt::NoScrollPhase)

Simuliert ein Radereignis innerhalb von window an der Position pos in lokalen Fensterkoordinaten. angleDelta enthält den Drehwinkel des Rads. Ein positiver Wert bedeutet Vorwärtsdrehung, ein negativer Wert bedeutet Rückwärtsdrehung. pixelDelta enthält den Bildlaufabstand in Pixeln auf dem Bildschirm. Dieser Wert kann Null sein. Die Tastaturzustände zum Zeitpunkt des Ereignisses werden durch stateKey angegeben. Die Scrolling-Phase des Ereignisses wird durch phase spezifiziert.

Diese Funktion wurde in Qt 6.8 eingeführt.

Makro-Dokumentation

QBENCHMARK

Dieses Makro wird verwendet, um die Leistung von Code innerhalb eines Tests zu messen. Der zu prüfende Code ist in einem Codeblock enthalten, der diesem Makro folgt.

Ein Beispiel:

void TestBenchmark::simple()
{
    QString str1 = u"This is a test string"_s;
    QString str2 = u"This is a test string"_s;
    QCOMPARE(str1.localeAwareCompare(str2), 0);
    QBENCHMARK {
        str1.localeAwareCompare(str2);
    }
}

Siehe auch Erstellen eines Benchmarks und Schreiben eines Benchmarks.

QBENCHMARK_ONCE

Das Makro QBENCHMARK_ONCE dient zur Messung der Leistung eines Codeblocks durch einmalige Ausführung.

Dieses Makro wird verwendet, um die Leistung von Code innerhalb eines Tests zu messen. Der zu prüfende Code ist in einem Codeblock enthalten, der diesem Makro folgt.

Im Gegensatz zu QBENCHMARK wird der Inhalt des enthaltenen Codeblocks nur einmal ausgeführt. Die verstrichene Zeit wird als "0" gemeldet, wenn sie zu kurz ist, um von dem ausgewählten Backend gemessen zu werden.

Siehe auch Erstellen eines Benchmarks und Schreiben eines Benchmarks.

QCOMPARE(actual, expected)

Das Makro QCOMPARE() vergleicht einen Wert actual mit einem Wert expected unter Verwendung des Gleichheitsoperators. Wenn actual und expected übereinstimmen, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Beachten Sie immer die Semantik der QCOMPARE()-Parameter. Der erste Parameter, der übergeben wird, sollte immer der tatsächliche Wert sein, der durch den zu testenden Code erzeugt wird, während der zweite Parameter immer der erwartete Wert sein sollte. Wenn die Werte nicht übereinstimmen, gibt QCOMPARE() sie mit den Bezeichnungen Actual und Expected aus. Wenn die Reihenfolge der Parameter vertauscht ist, kann die Fehlersuche in einem fehlgeschlagenen Test verwirrend sein und Tests, die eine Null erwarten, können aufgrund von Rundungsfehlern fehlschlagen.

QCOMPARE() versucht, den Inhalt der Werte auszugeben, wenn der Vergleich fehlschlägt, so dass aus dem Testprotokoll ersichtlich ist, warum der Vergleich fehlgeschlagen ist.

Beispiel:

QCOMPARE(QString("hello").toUpper(), QString("HELLO"));

Beim Vergleich von Fließkomma-Typen (float, double und qfloat16) wird qFuzzyCompare() für endliche Werte verwendet. Wenn qFuzzyIsNull() für beide Werte wahr ist, werden sie auch als gleich angesehen. Unendliche Werte stimmen überein, wenn sie das gleiche Vorzeichen haben, und jedes NaN als tatsächlicher Wert stimmt mit jedem NaN als erwarteter Wert überein (auch wenn NaN != NaN, selbst wenn sie identisch sind).

Beim Vergleich von QList können Arrays und Initialisierungslisten des Werttyps als erwarteter Wert übergeben werden:

    const int expected[] = {8, 10, 12, 16, 20, 24};
    QCOMPARE(QFontDatabase::standardSizes(), expected);

Beachten Sie, dass die Verwendung von Initialisierungslisten die Definition eines Hilfsmakros erfordert, um zu verhindern, dass der Präprozessor die Kommas als Makroargumentbegrenzer interpretiert:

 #define ARG(...) __VA_ARGS__
     QCOMPARE(QFontDatabase::standardSizes(), ARG({8, 10, 12, 16, 20, 24}));
 #undef ARG

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Beispiel:

char *toString(const MyType &t)
{
    char *repr = new char[t.reprSize()];
    t.writeRepr(repr);
    return repr;
}

Die Rückgabe von toString() muss ein new char [] sein, d.h. sie muss mit delete[] (und nicht mit free() oder delete) freigegeben werden, sobald der aufrufende Code mit ihr fertig ist.

Siehe auch QVERIFY(), QTRY_COMPARE(), QTest::toString(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

[since 6.4] QCOMPARE_EQ(computed, baseline)

Das Makro QCOMPARE_EQ() prüft mit Hilfe des Gleichheitsoperators, ob computed gleich baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Ist dies nicht der Fall, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Die Funktion ist im Allgemeinen mit dem Aufruf von QVERIFY(computed == baseline); vergleichbar, gibt aber eine formatierte Fehlermeldung aus, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Hinweis: Anders als QCOMPARE() bietet dieses Makro keine Überladungen für eigene Typen und Zeiger. Wenn Sie also z.B. zwei const char * Werte als Parameter übergeben, werden Zeiger verglichen, während QCOMPARE() einen Vergleich von Strings im C-Stil durchführt.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

[since 6.4] QCOMPARE_GE(computed, baseline)

Das Makro QCOMPARE_GE() prüft mit Hilfe des Größer-als-gleich-Operators, ob computed mindestens baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.

Die Funktion ist im Allgemeinen mit dem Aufruf von QVERIFY(computed >= baseline); vergleichbar, gibt jedoch eine formatierte Fehlermeldung aus, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), und QCOMPARE_GT().

[since 6.4] QCOMPARE_GT(computed, baseline)

Das Makro QCOMPARE_GT() prüft mit Hilfe des Größer-als-Operators, ob computed größer als baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Die Funktion ist im Allgemeinen mit dem Aufruf von QVERIFY(computed > baseline); vergleichbar, gibt aber eine formatierte Fehlermeldung aus, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), und QCOMPARE_GE().

[since 6.4] QCOMPARE_LE(computed, baseline)

Das Makro QCOMPARE_LE() prüft mit dem Kleiner-als-oder-Gleich-Operator, ob computed höchstens baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Die Funktion ist im Allgemeinen mit dem Aufruf von QVERIFY(computed <= baseline); vergleichbar, gibt aber eine formatierte Fehlermeldung aus, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_GT(), und QCOMPARE_GE().

[since 6.4] QCOMPARE_LT(computed, baseline)

Das Makro QCOMPARE_LT() prüft mit Hilfe des less-than-Operators, ob computed kleiner als baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Ist dies nicht der Fall, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Die Funktion ist im Allgemeinen mit dem Aufruf von QVERIFY(computed < baseline); vergleichbar, gibt aber eine formatierte Fehlermeldung aus, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

[since 6.4] QCOMPARE_NE(computed, baseline)

Das Makro QCOMPARE_NE() überprüft mit Hilfe des Ungleichheitsoperators, dass computed nicht gleich baseline ist. Wenn dies der Fall ist, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler im Testprotokoll aufgezeichnet und die Testfunktion kehrt zurück, ohne weitere Prüfungen vorzunehmen.

Im Allgemeinen ist es ähnlich wie der Aufruf von QVERIFY(computed != baseline);, aber es wird eine formatierte Fehlermeldung ausgegeben, die im Falle eines Fehlers die Ausdrücke und Werte der Argumente computed und baseline angibt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Für Ihre eigenen Klassen können Sie QTest::toString() überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

QEXPECT_FAIL(dataIndex, comment, mode)

Das Makro QEXPECT_FAIL() markiert den nächsten QCOMPARE() oder QVERIFY() als erwarteten Fehler. Anstatt einen Fehler in das Testprotokoll aufzunehmen, wird ein erwarteter Fehler gemeldet.

Wenn ein QVERIFY() oder QCOMPARE() als erwarteter Fehler markiert wird, aber stattdessen bestanden wird, wird ein unerwartetes Bestehen (XPASS) in das Testprotokoll geschrieben und als Testfehler gezählt.

Der Parameter dataIndex beschreibt, für welchen Eintrag in den Testdaten der Fehler erwartet wird. Übergeben Sie eine leere Zeichenkette (""), wenn der Fehler für alle Einträge erwartet wird oder wenn keine Testdaten vorhanden sind.

comment wird an das Testprotokoll für den erwarteten Fehler angehängt.

mode ist ein QTest::TestFailMode und legt fest, ob der Test weiter ausgeführt werden soll oder nicht. Die mode wird unabhängig davon angewendet, ob der erwartete Testfehler auftritt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Beispiel 1:

QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43);

Im obigen Beispiel wird ein erwarteter Fehler in die Testausgabe geschrieben, wenn die Variable i nicht 42 ist. Wenn die Variable i 42 ist, wird stattdessen ein unerwartetes pass geschrieben. QEXPECT_FAIL() hat keinen Einfluss auf die zweite QCOMPARE()-Anweisung in diesem Beispiel.

Beispiel 2:

QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42);

Die obige Testfunktion wird für den Testdateneintrag data27 (unabhängig vom Wert von i) nicht weiter ausgeführt.

Siehe auch QTest::TestFailMode, QVERIFY(), und QCOMPARE().

QFAIL(message)

Dieses Makro kann verwendet werden, um einen Testfehler zu erzwingen. Der Test wird nicht mehr ausgeführt und der Fehler message wird an das Testprotokoll angehängt.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Beispiel:

if (sizeof(int) != 4)
    QFAIL("This test has not been ported to this platform yet.");

QFETCH(type, name)

Das Fetch-Makro erzeugt eine lokale Variable namens name mit dem Typ type auf dem Stack. Die Variablen name und type müssen mit einer Spalte aus der Datentabelle des Tests übereinstimmen. Dies wird überprüft und der Test bricht ab, wenn diese Überprüfung fehlschlägt.

Angenommen, ein Test hat die folgenden Daten:

void TestQString::toInt_data()
{
    QTest::addColumn<QString>("aString");
    QTest::addColumn<int>("expected");

    QTest::newRow("positive+value") << "42" << 42;
    QTest::newRow("negative-value") << "-42" << -42;
    QTest::newRow("zero") << "0" << 0;
}

Die Testdaten haben zwei Elemente, ein QString mit der Bezeichnung aString und eine Ganzzahl mit der Bezeichnung expected. Um diese Werte im eigentlichen Test abzurufen:

void TestQString::toInt()
{
     QFETCH(QString, aString);
     QFETCH(int, expected);

     QCOMPARE(aString.toInt(), expected);
}

aString und expected sind Variablen auf dem Stack, die mit den aktuellen Testdaten initialisiert werden.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird. Die Testfunktion muss eine _data-Funktion haben.

QFETCH_GLOBAL(type, name)

Dieses Makro holt eine Variable namens name mit dem Typ type aus einer Zeile der globalen Datentabelle. Die Variablen name und type müssen mit einer Spalte in der globalen Datentabelle übereinstimmen. Dies wird überprüft und der Test bricht ab, wenn die Überprüfung fehlschlägt.

Angenommen, ein Test hat die folgenden Daten:

void TestQLocale::initTestCase_data()
{
    QTest::addColumn<QLocale>("locale");
    QTest::newRow("C") << QLocale::c();
    QTest::newRow("UKish") << QLocale("en_GB");
    QTest::newRow("USAish") << QLocale(QLocale::English, QLocale::UnitedStates);
}

void TestQLocale::roundTripInt_data()
{
    QTest::addColumn<int>("number");
    QTest::newRow("zero") << 0;
    QTest::newRow("one") << 1;
    QTest::newRow("two") << 2;
    QTest::newRow("ten") << 10;
}

Die eigenen Daten des Tests sind eine einzelne Zahl pro Zeile. In diesem Fall liefert initTestCase_data() auch ein Gebietsschema pro Zeile. Daher wird dieser Test mit jeder Kombination von Gebietsschema aus letzterem und Zahl aus ersterem ausgeführt. Bei vier Zeilen in der globalen Tabelle und drei in der lokalen Tabelle wird die Testfunktion also für 12 verschiedene Testfälle ausgeführt (4 * 3 = 12).

void TestQLocale::roundTripInt()
{
    QFETCH_GLOBAL(QLocale, locale);
    QFETCH(int, number);
    bool ok;
    QCOMPARE(locale.toInt(locale.toString(number), &ok), number);
    QVERIFY(ok);
}

Der Ort wird mit QFETCH_GLOBAL() aus der globalen Datentabelle gelesen und die Zahl mit QFETCH() aus der lokalen Datentabelle.

Hinweis: Dieses Makro kann nur in Testmethoden einer Klasse mit einer initTestCase_data() Methode verwendet werden.

QFINDTESTDATA(filename)

Gibt ein QString für die Testdatendatei zurück, auf die filename verweist, oder ein leeres QString, wenn die Testdatendatei nicht gefunden werden konnte.

Mit diesem Makro kann der Test Daten aus einer externen Datei laden, ohne einen absoluten Dateinamen in den Test zu kodieren oder relative Pfade zu verwenden, die fehleranfällig sein können.

Der zurückgegebene Pfad ist der erste Pfad aus der folgenden Liste, der auf eine bestehende Datei oder ein Verzeichnis verweist:

Wenn die benannte Datei bzw. das benannte Verzeichnis an keinem dieser Orte existiert, wird eine Warnung in das Testprotokoll geschrieben.

Zum Beispiel in diesem Code:

bool tst_MyXmlParser::parse()
{
    MyXmlParser parser;
    QString input = QFINDTESTDATA("testxml/simple1.xml");
    QVERIFY(parser.parse(input));
}

Die Datei testdata wird als die erste existierende Datei von aufgelöst:

  • /home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
  • /usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml
  • /home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml

Auf diese Weise findet der Test seine Testdaten unabhängig davon, ob der Test installiert wurde und ob der Build-Tree des Tests gleich dem Source-Tree des Tests ist.

Hinweis: Die zuverlässige Erkennung von Testdaten aus dem Quellverzeichnis setzt voraus, dass entweder qmake verwendet wird oder das Makro QT_TESTCASE_BUILDDIR so definiert ist, dass es auf das Arbeitsverzeichnis zeigt, aus dem der Compiler aufgerufen wird, oder dass nur absolute Pfade zu den Quelldateien an den Compiler übergeben werden. Andernfalls kann der absolute Pfad des Quellverzeichnisses nicht ermittelt werden.

Hinweis: Das Makro QT_TESTCASE_BUILDDIR ist auch implizit definiert, wenn CMake verwendet wird und das Modul QtTest mit dem Ziel gelinkt ist. Sie können die Voreinstellung QT_TESTCASE_BUILDDIR ändern, indem Sie die Eigenschaft QT_TESTCASE_BUILDDIR auf dem Target setzen.

Hinweis: Für Tests, die das QTEST_APPLESS_MAIN() Makro verwenden, um eine main() Funktion zu generieren, wird QFINDTESTDATA nicht versuchen, Testdaten relativ zu QCoreApplication::applicationDirPath() zu finden. In der Praxis bedeutet dies, dass Tests, die QTEST_APPLESS_MAIN() verwenden, ihre Testdaten nicht finden, wenn sie von einem Shadow Build Tree aus ausgeführt werden.

QSKIP(description)

Wenn das Makro QSKIP() von einer Testfunktion aus aufgerufen wird, stoppt es die Ausführung des Tests, ohne einen Fehler in das Testprotokoll aufzunehmen. Sie können es verwenden, um Tests zu überspringen, die in der aktuellen Konfiguration keinen Sinn machen würden. Zum Beispiel kann ein Test zur Darstellung von Schriftarten QSKIP() aufrufen, wenn die benötigten Schriftarten nicht auf dem Testsystem installiert sind.

Der Text description wird an das Testprotokoll angehängt und sollte eine Erklärung enthalten, warum der Test nicht ausgeführt werden konnte.

Wenn der Test datengesteuert ist, wird bei jedem Aufruf von QSKIP() in der Testfunktion nur die aktuelle Zeile der Testdaten übersprungen, so dass ein unbedingter Aufruf von QSKIP() für jede Zeile der Testdaten eine Überspringungsmeldung im Testprotokoll erzeugt.

Wird das Makro QSKIP() von einer Funktion _data aus aufgerufen, stoppt es die Ausführung der Funktion _data und verhindert die Ausführung der zugehörigen Testfunktion. Dadurch wird ein datengesteuerter Test vollständig ausgelassen. Um einzelne Zeilen auszulassen, machen Sie sie durch Verwendung eines einfachen if (condition) newRow(...) << ... in der Funktion _data bedingt, anstatt QSKIP() in der Testfunktion zu verwenden.

Bei einem Aufruf aus initTestCase_data() überspringt das Makro QSKIP() alle Test- und _data -Funktionen. Wenn es von initTestCase() aus aufgerufen wird, ohne dass initTestCase_data() vorhanden ist, oder wenn es nur eine Zeile einrichtet, überspringt QSKIP() ebenfalls den gesamten Test. Enthält initTestCase_data() jedoch mehr als eine Zeile, so wird initTestCase() (gefolgt von jedem Test und schließlich dem Wrap-up) einmal pro Zeile aufgerufen. Daher überspringt ein Aufruf von QSKIP() in initTestCase() lediglich alle Testfunktionen für die aktuelle Zeile der globalen Daten, die von initTestCase_data() eingerichtet wurden.

Hinweis: Dieses Makro kann nur in einer Testfunktion oder _data Funktion verwendet werden, die vom Test-Framework aufgerufen wird.

Beispiel:

if (!QSqlDatabase::drivers().contains("SQLITE"))
    QSKIP("This test requires the SQLITE database driver");
Überspringen von bekannten Fehlern

Wenn ein Test einen bekannten Fehler aufdeckt, der nicht sofort behoben wird, verwenden Sie das Makro QEXPECT_FAIL(), um den Fehler zu dokumentieren und auf die Fehlerverfolgungskennung für das bekannte Problem zu verweisen. Wenn der Test ausgeführt wird, werden erwartete Fehler in der Testausgabe als XFAIL markiert und beim Setzen des Rückgabecodes des Testprogramms nicht als Fehler gezählt. Wenn ein erwarteter Fehler nicht auftritt, wird XPASS (unerwartetes Bestehen) in der Testausgabe gemeldet und als Testfehler gewertet.

Bei bekannten Fehlern ist QEXPECT_FAIL() besser als QSKIP(), da ein Entwickler den Fehler nicht beheben kann, ohne dass ein XPASS-Ergebnis ihn daran erinnert, dass auch der Test aktualisiert werden muss. Wenn QSKIP() verwendet wird, gibt es keine Erinnerung, den Test zu überarbeiten oder wieder zu aktivieren, ohne dass spätere Regressionen gemeldet werden.

Siehe auch QEXPECT_FAIL() und Geeignete Mechanismen zum Ausschluss von Tests auswählen.

QTEST(actual, testElement)

QTEST() ist ein Komfortmakro für QCOMPARE(), das den Wert actual mit dem Element testElement aus den Daten des Tests vergleicht. Wenn es kein solches Element gibt, wird der Test bestätigt.

Abgesehen davon verhält sich QTEST() genau wie QCOMPARE().

Anstatt zu schreiben:

QFETCH(QString, myString);
QCOMPARE(QString("hello").toUpper(), myString);

können Sie schreiben:

QTEST(QString("hello").toUpper(), "myString");

Siehe auch QCOMPARE().

QTEST_APPLESS_MAIN(TestClass)

Implementiert eine main()-Funktion, die alle Tests in TestClass ausführt.

Verhält sich wie QTEST_MAIN(), instanziert aber kein QApplication Objekt. Verwenden Sie dieses Makro für wirklich einfache, eigenständige Tests ohne GUI.

Siehe auch QTEST_MAIN().

QTEST_GUILESS_MAIN(TestClass)

Implementiert eine main()-Funktion, die ein QCoreApplication -Objekt und die TestClass instanziiert und alle Tests in der Reihenfolge ausführt, in der sie definiert wurden. Verwenden Sie dieses Makro, um eigenständige ausführbare Dateien zu erstellen.

Verhält sich wie QTEST_MAIN(), instanziiert aber ein QCoreApplication anstelle des QApplication Objekts. Verwenden Sie dieses Makro, wenn Ihr Testfall die von QApplication angebotene Funktionalität nicht benötigt, die Ereignisschleife aber dennoch notwendig ist.

Siehe auch QTEST_MAIN().

QTEST_MAIN(TestClass)

Implementiert eine main()-Funktion, die ein Anwendungsobjekt und die TestClass instanziiert und alle Tests in der Reihenfolge ausführt, in der sie definiert wurden. Verwenden Sie dieses Makro, um eigenständige ausführbare Dateien zu erstellen.

Wenn QT_WIDGETS_LIB definiert ist, wird das Anwendungsobjekt QApplication sein, wenn QT_GUI_LIB definiert ist, wird das Anwendungsobjekt QGuiApplication sein, andernfalls wird es QCoreApplication sein. Wenn qmake verwendet wird und die Konfiguration QT += widgets enthält, wird QT_WIDGETS_LIB automatisch definiert. Wenn qmake verwendet wird und die Konfiguration QT += gui enthält, wird QT_GUI_LIB automatisch definiert.

Hinweis: Auf Plattformen, auf denen die Tastaturnavigation standardmäßig aktiviert ist, wird sie durch dieses Makro zwangsweise deaktiviert, wenn QT_WIDGETS_LIB definiert ist. Dies geschieht, um die Verwendung von Tastenereignissen beim Schreiben von Autotests zu vereinfachen. Wenn Sie einen Testfall schreiben möchten, der die Tastaturnavigation verwendet, sollten Sie sie entweder in den Funktionen initTestCase() oder init() Ihres Testfalls aktivieren, indem Sie QApplication::setNavigationMode() aufrufen.

Beispiel:

QTEST_MAIN(TestQString)

Siehe auch QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec(), und QApplication::setNavigationMode().

QTRY_COMPARE(actual, expected)

Führt einen Vergleich der Werte actual und expected durch, indem es QTRY_COMPARE_WITH_TIMEOUT() mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Siehe auch QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY(), und QEXPECT_FAIL().

[since 6.4] QTRY_COMPARE_EQ(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_EQ_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ() und QTRY_COMPARE_EQ_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_EQ_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_EQ(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll vermerkt und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_EQ() und QTRY_COMPARE_EQ().

[since 6.4] QTRY_COMPARE_GE(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_GE_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_GE() und QTRY_COMPARE_GE_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_GE_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_GE(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll aufgezeichnet und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_GE() und QTRY_COMPARE_GE().

[since 6.4] QTRY_COMPARE_GT(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_GT_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_GT() und QTRY_COMPARE_GT_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_GT_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_GT(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll aufgezeichnet und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_GT() und QTRY_COMPARE_GT().

[since 6.4] QTRY_COMPARE_LE(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_LE_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_LE() und QTRY_COMPARE_LE_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_LE_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_LE(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll aufgezeichnet und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_LE() und QTRY_COMPARE_LE().

[since 6.4] QTRY_COMPARE_LT(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_LT_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_LT() und QTRY_COMPARE_LT_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_LT_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_LT(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll aufgezeichnet und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_LT() und QTRY_COMPARE_LT().

[since 6.4] QTRY_COMPARE_NE(computed, baseline)

Führt einen Vergleich der Werte von computed und baseline durch, indem es QTRY_COMPARE_NE_WITH_TIMEOUT mit einem Timeout von fünf Sekunden aufruft.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_NE() und QTRY_COMPARE_NE_WITH_TIMEOUT().

[since 6.4] QTRY_COMPARE_NE_WITH_TIMEOUT(computed, baseline, timeout)

Dieses Makro ist ähnlich wie QCOMPARE_NE(), führt aber den Vergleich der Werte computed und baseline wiederholt durch, bis entweder der Vergleich true oder timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll aufgezeichnet und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.4 eingeführt.

Siehe auch QCOMPARE_NE() und QTRY_COMPARE_NE().

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

Das Makro QTRY_COMPARE_WITH_TIMEOUT() ähnelt dem Makro QCOMPARE(), führt jedoch den Vergleich der Werte actual und expected wiederholt durch, bis entweder die beiden Werte gleich sind oder der Wert timeout (in Millisekunden) erreicht ist. Zwischen jedem Vergleich werden Ereignisse verarbeitet. Wird die Zeitüberschreitung erreicht, wird ein Fehler im Testprotokoll vermerkt und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Siehe auch QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY(), und QEXPECT_FAIL().

QTRY_VERIFY2(condition, message)

Überprüft condition durch Aufruf von QTRY_VERIFY2_WITH_TIMEOUT() mit einem Timeout von fünf Sekunden. Wenn condition dann immer noch falsch ist, wird message ausgegeben. Die message ist eine einfache C-Zeichenkette.

Beispiel:

QTRY_VERIFY2(list.size() > 2, QByteArray::number(list.size()).constData());

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Siehe auch QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), und QEXPECT_FAIL().

QTRY_VERIFY(condition)

Prüft die condition durch Aufruf von QTRY_VERIFY_WITH_TIMEOUT() mit einem Timeout von fünf Sekunden.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Siehe auch QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), und QEXPECT_FAIL().

QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

Das Makro QTRY_VERIFY2_WITH_TIMEOUT ist ähnlich wie QTRY_VERIFY_WITH_TIMEOUT(), außer dass es eine ausführliche message ausgibt, wenn condition nach der angegebenen timeout (in Millisekunden) immer noch falsch ist. Die message ist ein einfacher C-String.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Beispiel:

QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10s);

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Siehe auch QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), und QEXPECT_FAIL().

QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

Das Makro QTRY_VERIFY_WITH_TIMEOUT() ähnelt dem Makro QVERIFY(), prüft jedoch wiederholt die condition, bis entweder die Bedingung erfüllt oder die timeout (in Millisekunden) erreicht ist. Zwischen jeder Auswertung werden Ereignisse verarbeitet. Wird der Timeout erreicht, wird ein Fehler im Testprotokoll vermerkt und der Test wird nicht weiter ausgeführt.

Seit Qt 6.8 kann timeout auch ein std::chrono Literal sein, wie z.B. 2s.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Siehe auch QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), und QEXPECT_FAIL().

QVERIFY2(condition, message)

Das Makro QVERIFY2() verhält sich genau wie QVERIFY(), mit dem Unterschied, dass es message meldet, wenn condition falsch ist. Die message ist eine einfache C-Zeichenkette.

Die Nachricht kann auch von einem Funktionsaufruf erhalten werden, der eine einfache C-Zeichenkette erzeugt, wie z.B. qPrintable(), angewandt auf eine QString, die auf jede ihrer üblichen Arten aufgebaut sein kann, einschließlich der Anwendung von .args(), um einige Daten zu formatieren.

Beispiel:

QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist.");

Wenn Sie zum Beispiel ein Dateiobjekt haben und dessen open() Funktion testen, könnten Sie einen Test mit einer Anweisung wie dieser schreiben:

bool opened = file.open(QIODevice::WriteOnly);
QVERIFY(opened);

Wenn dieser Test fehlschlägt, gibt er keinen Hinweis darauf, warum die Datei nicht geöffnet werden konnte:

FAIL! : tst_QFile::open_write() 'opened' returned FALSE. ()

Wenn es eine aussagekräftigere Fehlermeldung gibt, die Sie aus den getesteten Werten konstruieren können, können Sie QVERIFY2() verwenden, um diese Meldung zusammen mit Ihrer Testbedingung zu übergeben, um eine aussagekräftigere Fehlermeldung zu erhalten:

QVERIFY2(file.open(QIODevice::WriteOnly),         qPrintable(QString("open %1: %2")
                   .arg(file.fileName()).arg(file.errorString())));

Wenn dieser Zweig im Qt CI-System getestet wird, wird die obige detaillierte Fehlermeldung in die Zusammenfassung eingefügt, die im Code-Review-System veröffentlicht wird:

FAIL! : tst_QFile::open_write() 'opened' returned FALSE. (open /tmp/qt.a3B42Cd: No space left on device)

Siehe auch QVERIFY(), QCOMPARE(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

QVERIFY(condition)

Das Makro QVERIFY() prüft, ob die Angabe condition wahr ist oder nicht. Wenn es wahr ist, wird die Ausführung fortgesetzt. Wenn nicht, wird ein Fehler in das Testprotokoll eingetragen und der Test wird nicht weiter ausgeführt.

Sie können QVERIFY2() verwenden, wenn es sinnvoll und nützlich ist, zusätzliche Informationen in den Testfehlerbericht aufzunehmen.

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die von der Testumgebung aufgerufen wird.

Der folgende Code zeigt zum Beispiel, wie dieses Makro verwendet wird, um zu überprüfen, ob ein QSignalSpy Objekt gültig ist:

QVERIFY(spy.isValid());

Um weitere Informationen über den Fehler zu erhalten, verwenden Sie QCOMPARE(x, y) anstelle von QVERIFY(x == y), da es sowohl den erwarteten als auch den tatsächlichen Wert meldet, wenn der Vergleich fehlschlägt.

Siehe auch QCOMPARE(), QTRY_VERIFY(), QSignalSpy, QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT(), und QCOMPARE_GE().

[since 6.3] QVERIFY_THROWS_EXCEPTION(exceptiontype, ...)

Das Makro QVERIFY_THROWS_EXCEPTION führt den im variadischen Argument angegebenen Ausdruck aus und erwartet, dass eine durch den Ausdruck ausgelöste Ausnahme abgefangen wird.

Es gibt mehrere mögliche Ergebnisse:

  • Wenn der Ausdruck eine Ausnahme auslöst, die entweder dieselbe ist wie exceptiontype oder von exceptiontype abgeleitet ist, wird die Ausführung fortgesetzt.
  • Wenn der Ausdruck keine Ausnahme auslöst oder die ausgelöste Ausnahme von std::exception abgeleitet ist, wird ein Fehler im Testprotokoll aufgezeichnet und das Makro kehrt vorzeitig zurück (aus der umschließenden Funktion).
  • Wenn die ausgelöste Ausnahme weder von std::exception noch von exceptiontype stammt, wird ein Fehler im Testprotokoll aufgezeichnet, und die Ausnahme wird erneut ausgelöst. Dies vermeidet Probleme mit z.B. pthread Abbruchausnahmen.

Das Makro verwendet variadische Argumente, so dass der Ausdruck Kommas enthalten kann, die der Präprozessor als Argumenttrennzeichen betrachtet, z.B. wie in

QVERIFY_THROWS_EXCEPTION(std::bad_alloc,
// macro arguments:      ^ exceptiontype
                         std::vector<std::pair<int, long>>{42'000'000'000, {42, 42L}});
// macro arguments:      \---------- 1 ----------/  \-------- 2 --------/  \3/  \ 4 /
//                       \----------------------- expression -----------------------/

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.3 eingeführt.

[since 6.3] QVERIFY_THROWS_NO_EXCEPTION(...)

Das Makro QVERIFY_THROWS_NO_EXCEPTION führt den in seinem variadischen Argument angegebenen Ausdruck aus und versucht, jede durch den Ausdruck ausgelöste Ausnahme abzufangen.

Es gibt mehrere verschiedene Ergebnisse:

  • Wenn der Ausdruck keine Ausnahme auslöst, wird die Ausführung fortgesetzt.
  • Andernfalls, wenn eine von std::exception abgeleitete Ausnahme abgefangen wird, wird ein Fehler im Testprotokoll aufgezeichnet und das Makro kehrt vorzeitig zurück (implizite Rückkehr von der umschließenden Funktion).
  • Wenn eine Ausnahme, die nicht von std::exception abgeleitet ist, abgefangen wird, wird ein Fehler im Testprotokoll aufgezeichnet und die Ausnahme wird erneut ausgelöst. Dies vermeidet Probleme mit z.B. pthread Abbruchausnahmen.

Das Makro verwendet variadische Argumente, so dass der Ausdruck Kommas enthalten kann, die der Präprozessor als Argumenttrennzeichen betrachtet, z.B. wie in

QVERIFY_THROWS_NO_EXCEPTION(std::pair<int, long>{42, 42L});
// macro arguments:         \---- 1 ----/  \-- 2 -/  \3 /

Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Testframework aufgerufen wird.

Dieses Makro wurde in Qt 6.3 eingefü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.