QTest Namespace
Der QTest-Namensraum enthält alle Funktionen und Deklarationen, die mit Qt Test in Zusammenhang stehen. Mehr...
| Header: | #include <QTest> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Test) target_link_libraries(mytarget PRIVATE Qt6::Test) |
| qmake: | QT += testlib |
Klassen
| class | QTouchEventSequence |
| class | QTouchEventWidgetSequence |
(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 } |
Variablen
(since 6.11) std::atomic<std::chrono::milliseconds> | defaultTryTimeout |
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() |
(since 6.11) const char * | currentGlobalDataTag() |
| 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( defaultTryTimeout.load(std::memory_order_relaxed))) |
| bool | qWaitFor(Functor predicate, int timeout) |
(since 6.10) bool | qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowActive(QWidget *widget) |
(since 6.10) bool | qWaitForWindowActive(QWindow *window) |
| bool | qWaitForWindowActive(QWidget *widget, int timeout) |
| bool | qWaitForWindowActive(QWindow *window, int timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowExposed(QWidget *widget) |
(since 6.10) bool | qWaitForWindowExposed(QWindow *window) |
| bool | qWaitForWindowExposed(QWidget *widget, int timeout) |
| bool | qWaitForWindowExposed(QWindow *window, int timeout) |
(since 6.7) bool | qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout) |
(since 6.7) bool | qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout) |
(since 6.10) bool | qWaitForWindowFocused(QWidget *widget) |
(since 6.10) bool | qWaitForWindowFocused(QWindow *window) |
| 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(const T &value) |
| char * | toString(QSizePolicy sp) |
| 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) |
| 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) |
| 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.9) | QCOMPARE_3WAY(linke Seite, rechte Seite, Reihenfolge) |
(since 6.4) | QCOMPARE_EQ(berechnet, Basiswert) |
(since 6.4) | QCOMPARE_GE(berechnet, Basiswert) |
(since 6.4) | QCOMPARE_GT(berechnet, Basiswert) |
(since 6.4) | QCOMPARE_LE(berechnet, Basiswert) |
(since 6.4) | QCOMPARE_LT(berechnet, Basiswert) |
(since 6.4) | QCOMPARE_NE(berechnet, Basiswert) |
| QEXPECT_FAIL(Datenindex, Kommentar, Modus) | |
| QFAIL(Nachricht) | |
| QFETCH(Typ, Name) | |
| QFETCH_GLOBAL(Typ, Name) | |
| QFINDTESTDATA(Dateiname) | |
| QSKIP(Beschreibung) | |
| QTEST(tatsächlich, Testelement) | |
| QTEST_APPLESS_MAIN(TestKlasse) | |
| QTEST_GUILESS_MAIN(TestKlasse) | |
| QTEST_MAIN(TestKlasse) | |
(since 6.8) | QTEST_THROW_ON_FAIL |
(since 6.8) | QTEST_THROW_ON_SKIP |
| QTRY_COMPARE(tatsächlich, erwartet) | |
(since 6.4) | QTRY_COMPARE_EQ(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_EQ_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
(since 6.4) | QTRY_COMPARE_GE(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_GE_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
(since 6.4) | QTRY_COMPARE_GT(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_GT_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
(since 6.4) | QTRY_COMPARE_LE(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_LE_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
(since 6.4) | QTRY_COMPARE_LT(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_LT_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
(since 6.4) | QTRY_COMPARE_NE(berechnet, Basiswert) |
(since 6.4) | QTRY_COMPARE_NE_WITH_TIMEOUT(berechnet, Basiswert, Zeitüberschreitung) |
| QTRY_COMPARE_WITH_TIMEOUT(tatsächlich, erwartet, Zeitüberschreitung) | |
| QTRY_VERIFY2(Zustand, Meldung) | |
| QTRY_VERIFY(Bedingung) | |
| QTRY_VERIFY2_WITH_TIMEOUT(Bedingung, Meldung, Zeitüberschreitung) | |
| QTRY_VERIFY_WITH_TIMEOUT(Bedingung, Zeitüberschreitung) | |
| QVERIFY2(Bedingung, Meldung) | |
| QVERIFY(Bedingung) | |
(since 6.3) | QVERIFY_THROWS_EXCEPTION(Ausnahmetyp, ...) |
(since 6.3) | QVERIFY_THROWS_NO_EXCEPTION(...) |
Ausführliche Beschreibung
Informationen zum Schreiben von Unit-Tests finden Sie in der Übersicht „Qt Test “.
Klassen
Klasse QTouchEventSequence
Die Klasse `QTouchEventSequence` dient zur Simulation einer Abfolge von Touch-Ereignissen. Mehr...
Klasse QTouchEventWidgetSequence
Die Klasse `QTouchEventWidgetSequence` dient dazu, eine Abfolge von Berührungsereignissen für ein Widget zu simulieren. Mehr...
Klasse ThrowOnFailDisabler
Klasse „ThrowOnFailEnabler“
Klasse „ThrowOnSkipDisabler“
Klasse „ThrowOnSkipEnabler“
Typdokumentation
enum QTest::KeyAction
Diese Enumeration beschreibt mögliche Aktionen für die Schlüsselverarbeitung.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTest::Press | 0 | Die Taste wird gedrückt. |
QTest::Release | 1 | Die Taste wird losgelassen. |
QTest::Click | 2 | Die Taste wird angeklickt (gedrückt und losgelassen). |
QTest::Shortcut | 3 | Ein Tastenkürzel wird aktiviert. Dieser Wert wurde in Qt 5.6 hinzugefügt. |
enum QTest::MouseAction
Diese Enumeration beschreibt mögliche Aktionen für die Mausbedienung.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTest::MousePress | 0 | Eine Maustaste wird gedrückt. |
QTest::MouseRelease | 1 | Eine Maustaste wird losgelassen. |
QTest::MouseClick | 2 | Es wird auf eine Maustaste geklickt (gedrückt und losgelassen). |
QTest::MouseDClick | 3 | Es erfolgt ein Doppelklick auf eine Maustaste (zweimaliges Drücken und Loslassen). |
QTest::MouseMove | 4 | Der Mauszeiger hat sich bewegt. |
enum QTest::QBenchmarkMetric
Diese Enumeration listet alle Elemente auf, für die Benchmark-Tests durchgeführt werden können.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTest::FramesPerSecond | 0 | Bilder pro Sekunde |
QTest::BitsPerSecond | 1 | Bits pro Sekunde |
QTest::BytesPerSecond | 2 | Bytes pro Sekunde |
QTest::WalltimeMilliseconds | 3 | Taktzeit in Millisekunden |
QTest::WalltimeNanoseconds | 7 | Taktzeit in Nanosekunden |
QTest::BytesAllocated | 8 | Speicherverbrauch in Bytes |
QTest::Events | 6 | Ereignisanzahl |
QTest::CPUTicks | 4 | CPU-Zeit |
QTest::CPUMigrations | 9 | Prozessmigrationen zwischen CPUs |
QTest::CPUCycles | 10 | CPU-Zyklen |
QTest::RefCPUCycles | 30 | Referenz-CPU-Zyklen |
QTest::BusCycles | 11 | Buszyklen |
QTest::StalledCycles | 12 | Blockierte Zyklen |
QTest::InstructionReads | 5 | Befehls-Lesevorgänge |
QTest::Instructions | 13 | Ausgeführte Befehle |
QTest::BranchInstructions | 14 | Verzweigungsbefehle |
QTest::BranchMisses | 15 | Falsch vorhergesagte Verzweigungsbefehle |
QTest::CacheReferences | 16 | Cache-Zugriffe jeglicher Art |
QTest::CacheMisses | 20 | Cache-Fehltreffer jeglicher Art |
QTest::CacheReads | 17 | Cache-Lese-/Ladevorgänge |
QTest::CacheReadMisses | 21 | Cache-Lese-/Lade-Fehltreffer |
QTest::CacheWrites | 18 | Cache-Schreib-/Speichervorgänge |
QTest::CacheWriteMisses | 22 | Cache-Schreib-/Speicher-Fehltreffer |
QTest::CachePrefetches | 19 | Cache-Vorabrufe |
QTest::CachePrefetchMisses | 23 | Cache-Vorabruf-Fehltreffer |
QTest::ContextSwitches | 24 | Kontextwechsel |
QTest::PageFaults | 25 | Seitenfehler jeglicher Art |
QTest::MinorPageFaults | 26 | Geringfügige Seitenfehler |
QTest::MajorPageFaults | 27 | Schwerwiegende Seitenfehler |
QTest::AlignmentFaults | 28 | Durch Fehlausrichtung verursachte Fehler |
QTest::EmulationFaults | 29 | Fehler, die eine Software-Emulation erforderten |
Beachten Sie, dass „ WalltimeNanoseconds “ und „ BytesAllocated “ nur zur Verwendung über „ setBenchmarkResult()“ bereitgestellt werden und die Ergebnisse dieser Metriken nicht automatisch vom „ QTest “-Framework bereitgestellt werden können.
Siehe auch QTest::benchmarkMetricName() und QTest::benchmarkMetricUnit().
enum QTest::TestFailMode
Diese Enumeration beschreibt die Modi für den Umgang mit einer Prüfung, beispielsweise 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QTest::Abort | 1 | Bricht die Ausführung des Tests ab. Verwenden Sie diesen Modus, wenn es nach der problematischen Prüfung keinen Sinn macht, den Test weiter auszuführen. |
QTest::Continue | 2 | Setzt die Ausführung des Tests nach der problematischen Prüfung fort. |
Siehe auch ` QEXPECT_FAIL()`.
Variablendokumentation
[since 6.11] std::atomic<std::chrono::milliseconds> QTest::defaultTryTimeout
Diese globale Variable speichert das Standard-Timeout, das von den Funktionen „ QTRY_* “ und „ qWait “ verwendet wird.
Der typischste Anwendungsfall für diese Variable ist die Änderung des Timeouts für einen gesamten Test:
using namespace std::chrono_literals;
// Since the atomic itself (defaultTryTimeout) is the only data,
// all reads and stores can be relaxed.
QTest::defaultTryTimeout.store(1s, std::memory_order_relaxed);Sie können sie jedoch auch mithilfe von ` QAtomicScopedValueRollback` für einen bestimmten Geltungsbereich festlegen:
const auto timeoutRollback = QAtomicScopedValueRollback(
QTest::defaultTryTimeout, 1s, std::memory_order_relaxed);Um auf den Wert zuzugreifen, rufen Sie ` load()` auf:
// Since the atomic itself is all the data, all reads and stores can be relaxed.
QCOMPARE(QTest::defaultTryTimeout.load(std::memory_order_relaxed), 1s);Diese Variable wurde in Qt 6.11 eingeführt.
Funktionsdokumentation
template <typename T> void QTest::addColumn(const char *name, T *dummy = 0)
Fügt den aktuellen Testdaten eine Spalte vom Typ „ T “ hinzu. „ name “ ist der Name der Spalte. „ dummy “ ist eine Umgehungslösung 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 eigentlichen 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 aufgerufen werden, die vom Test-Framework ausgelöst wird.
Ein ausführlicheres Beispiel finden Sie unter „Datengesteuertes Testen “.
Siehe auch „ QTest::newRow()“, „ QFETCH()“ und „ QMetaType “.
QTestData &QTest::addRow(const char *format, ...)
Fügt den aktuellen Testdaten eine neue Zeile hinzu.
Die Argumente der Funktion werden zur Formatierung gemäß format an std::snprintf() übergeben. Hinweise und Einschränkungen finden Sie in der Dokumentation zu std::snprintf().
Die Testausgabe identifiziert den Testlauf anhand dieser Testdaten mit dem Namen, der sich aus dieser Formatierung ergibt.
Gibt eine QTestData-Referenz zurück, die zum Einlesen von Daten verwendet werden kann, wobei für jede Spalte der Tabelle ein Wert übergeben wird.
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, die vom Test-Framework aufgerufen wird.
Ein ausführlicheres Beispiel finden Sie unter „Datengesteuertes Testen “.
Siehe auch newRow(), addColumn() und QFETCH().
const char *QTest::benchmarkMetricName(QTest::QBenchmarkMetric metric)
Gibt den Enum-Wert „ metric “ als Zeichenfolge 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)
Erstellt ein Dummy-Touch-Gerät vom Typ „ devType “ mit den Funktionen „ caps “ zur Simulation von Touch-Ereignissen.
Das Touch-Gerät wird bei der Qt-Fenstersystemschnittstelle registriert. In der Regel sollten Sie `createTouchDevice()` verwenden, um eine ` QPointingDevice `-Mitgliedsvariable in Ihrer Testfallklasse zu initialisieren, dieselbe 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 der derzeit ausgeführten Binärdatei zurück.
const char *QTest::currentDataTag()
Gibt den Namen der aktuellen Testdaten zurück. Wenn dem Test keine Testdaten zugewiesen sind, gibt die Funktion „ nullptr “ zurück.
[since 6.11] const char *QTest::currentGlobalDataTag()
Gibt den Namen der aktuellen globalen Testdaten zurück. Wenn dem Test keine globalen Testdaten zugewiesen sind, gibt die Funktion „ nullptr “ zurück.
Diese Funktion wurde in Qt 6.11 eingeführt.
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 ein Überspringen ausgelöst wurde. Ist der Wert „true“, sollte die Testfunktion vorzeitig zurückkehren. Insbesondere beenden die Makros „ QTRY_* “ und die Test-Ereignisschleife ihre Schleifen vorzeitig, wenn sie während der Testfunktion (jedoch nicht während deren `cleanup()`) ausgeführt werden. Nachdem ein Test eine Hilfsfunktion aufgerufen hat, die die Makros dieses Moduls verwendet, kann er diese Funktion nutzen, um zu prüfen, ob er vorzeitig 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)
Für jede Warnung, die der Bedingung „ messagePattern “ entspricht, wird ein Testfehler an das Testprotokoll angehängt.
Die Testfunktion setzt die Ausführung fort, wenn ein Fehler hinzugefügt wird. Um den Test stattdessen abzubrechen, können Sie currentTestFailed() prüfen und vorzeitig zurückkehren, falls der Wert „ true “ ist.
Bei jeder Warnung führt das erste Muster, das übereinstimmt, zu einem Fehler, während die übrigen Muster ignoriert werden.
Alle Muster werden am Ende jeder Testfunktion gelöscht.
void FileTest::loadFiles()
{
QTest::failOnWarning(QRegularExpression("^Laden fehlgeschlagen"));
// Jedes dieser Muster führt zu einem Testfehler:
qWarning() << "Failed to load image";
qWarning() << "Failed to load video";
}Um jeden Test zu verfehlen, der eine bestimmte Warnung auslöst, übergeben Sie dieser Funktion in init() einen geeigneten regulären Ausdruck:
void FileTest::init()
{
QTest::failOnWarning(
QRegularExpression("QFile::.*: File(.*) already open"));
}Im gängigen Fall, bei dem bei jeder Warnung ein Test fehlschlagen soll, übergeben Sie keinen Parameter:
void FileTest::init()
{
QTest::failOnWarning();
}Hinweis: ignoreMessage() hat Vorrang vor dieser Funktion, sodass alle Warnungen, die einem Muster entsprechen, das sowohl in ignoreMessage() als auch in failOnWarning() angegeben wurde, ignoriert werden.
Diese Funktion wurde in Qt 6.3 eingeführt.
Siehe auch QTEST_FATAL_FAIL.
[since 6.8] void QTest::failOnWarning()
Fügt dem Testprotokoll einen Testfehler hinzu, sobald eine Warnung ausgegeben wird.
Diese Funktion überlädt „ QTest::failOnWarning()“.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch ` failOnWarning() (const char *)`.
[since 6.3] void QTest::failOnWarning(const char *message)
Fügt dem Testprotokoll einen Testfehler hinzu, wenn die Funktion „ message “ aufgerufen wird.
Diese Funktion überlädt die Funktion ` QTest::failOnWarning()`.
Diese Funktion wurde in Qt 6.3 eingeführt.
Siehe auch ` failOnWarning()`.
void QTest::ignoreMessage(QtMsgType type, const char *message)
Ignoriert Meldungen, die mit den Funktionen „ qDebug()“, „ qInfo()“ oder „ qWarning()“ erzeugt wurden. Wenn die Meldung „ message “ mit dem entsprechenden „ type “ ausgegeben wird, wird sie aus dem Testprotokoll entfernt. Wenn der Test abgeschlossen ist und die Meldung „ message “ nicht ausgegeben wurde, wird dem Testprotokoll ein Testfehler hinzugefügt.
Hinweis: Durch den Aufruf dieser Funktion wird nur eine Meldung ignoriert. Wenn die Meldung, die Sie ignorieren möchten, 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, ob ` QDir::mkdir()` die richtige Warnung ausgibt, wenn es mit einem ungültigen Dateinamen aufgerufen wird.
Hinweis: ` message ` wird als UTF-8 interpretiert.
void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
Ignoriert Meldungen, die mit den Funktionen „ qDebug()“, „ qInfo()“ oder „ qWarning()“ erzeugt wurden. Wenn eine Meldung ausgegeben wird, die dem Muster „ messagePattern “ mit dem entsprechenden „ type “ entspricht, wird sie aus dem Testprotokoll entfernt. Wenn der Test abgeschlossen ist und die Meldung nicht ausgegeben wurde, wird dem Testprotokoll ein Testfehler angehängt.
Hinweis: Durch den Aufruf dieser Funktion wird jeweils nur eine Meldung ignoriert. Wenn die Meldung, die Sie ignorieren möchten, zweimal ausgegeben wird, müssen Sie `ignoreMessage()` ebenfalls zweimal aufrufen.
Dies ist eine überladene Funktion.
void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Klicken auf „ key “ mit einem optionalen „ modifier “ auf einer „ widget “. Wenn „ delay “ größer als 0 ist, wartet der Test „ delay “ Millisekunden, bevor die Taste angeklickt wird.
Beispiele:
QTest::keyClick(myWidget, Qt::Key_Escape);
QTest::keyClick(myWidget, Qt::Key_Escape, Qt::ShiftModifier, 200);Das erste Beispiel oben simuliert das Drücken der Taste „ escape “ auf myWidget ohne Tastaturmodifikatoren und ohne Verzögerung. Das zweite Beispiel simuliert das Drücken von shift-escape auf myWidget nach einer Verzögerung des Tests von 200 ms.
Siehe auch QTest::keyClicks().
void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Klicken auf „ key “ mit einem optionalen „ modifier “ auf „ widget “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor die Taste angeklickt wird.
Beispiel:
QTest::keyClick(myWidget, 'a');Das obige Beispiel simuliert das Klicken auf „ a “ unter myWidget ohne Tastaturmodifikatoren und ohne Verzögerung des Tests.
Dies ist eine überladene Funktion.
Siehe auch „ QTest::keyClicks()“.
void QTest::keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Klicken auf „ key “ mit einem optionalen „ modifier “ auf einer „ window “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor die Taste angeklickt wird.
Beispiele:
QTest::keyClick(&myWindow, Qt::Key_Escape);
QTest::keyClick(&myWindow, Qt::Key_Escape, Qt::ShiftModifier, 200);Das erste Beispiel oben simuliert das Drücken der Taste „ escape “ auf myWindow ohne Tastaturmodifikatoren und ohne Verzögerung. Das zweite Beispiel simuliert das Drücken von shift-escape auf myWindow nach einer Verzögerung des Tests von 200 ms.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyClicks().
void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Klicken auf „ key “ mit einer optionalen Verzögerung von „ modifier “ auf der Seite window. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor die Taste angeklickt wird.
Beispiel:
QWidget myWindow;
QTest::keyClick(&myWindow, Qt::Key_Tab);Das obige Beispiel simuliert das Klicken auf „ a “ unter myWindow ohne Tastaturmodifikatoren und ohne Verzögerung des Tests.
Dies ist eine überladene Funktion.
Siehe auch „ QTest::keyClicks()“.
void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Klicken auf eine Tasten sequence auf einer Tastatur widget. Optional können 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 Klicken der Tastenfolge, die „hello world“ darstellt, auf myWidget ohne 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 der angegebenen „ key “ und der zugehörigen „ action “. Optional können ein Tastatur modifier sowie eine „ delay “ (in Millisekunden) des Tests vor dem Senden des Ereignisses angegeben werden.
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Sendet ein Qt-Tastenereignis an „ widget “ mit dem angegebenen Tasten ascii und dem zugehörigen „ action “. Optional können eine Tastatur modifier sowie eine „ delay “ (in Millisekunden) des Tests vor dem Senden des Ereignisses angegeben werden.
Dies ist eine überladene Funktion.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Sendet ein Qt-Tastenereignis an „ window “ mit dem angegebenen „ key “ und dem zugehörigen „ action “. Optional können ein Tastatur modifier sowie eine „ delay “ (in Millisekunden) des Tests vor dem Senden des Ereignisses angegeben werden.
Dies ist eine überladene Funktion.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Sendet ein Qt-Tastenereignis an window mit der angegebenen Tasten ascii und der zugehörigen action. Optional können ein Tastatur modifier sowie eine delay (in Millisekunden) des Tests vor dem Senden des Ereignisses angegeben werden.
Dies ist eine überladene Funktion.
void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Drücken einer Taste „ key “ mit einem optionalen „ modifier “ auf einer Taste „ widget “. Ist „ delay “ größer als 0, wartet der Test „ 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)
Simuliert das Drücken der Taste „ key “ mit einem optionalen „ modifier “ auf einer Taste „ widget “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor die Taste gedrückt wird.
Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit ` keyRelease()` wieder loslassen.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyRelease() und QTest::keyClick().
void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Drücken der Taste „ key “ mit einem optionalen „ modifier “ auf einer „ window “. Wenn „ delay “ größer als 0 ist, wartet der Test „ delay “ Millisekunden, bevor die Taste gedrückt wird.
Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit ` keyRelease()` wieder loslassen.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyRelease() und QTest::keyClick().
void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Drücken der Taste „ key “ mit einem optionalen „ modifier “ auf einer „ window “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor die Taste gedrückt wird.
Hinweis: Zu einem bestimmten Zeitpunkt sollten Sie die Taste mit ` keyRelease()` wieder loslassen.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyRelease() und QTest::keyClick().
void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Freigeben eines „ key “ mit einem optionalen „ modifier “ auf einem „ widget “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor der Schlüssel freigegeben wird.
Siehe auch QTest::keyPress() und QTest::keyClick().
void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Freigeben eines „ key “ mit einer optionalen „ modifier “ auf einem „ widget “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor der Schlüssel freigegeben wird.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyClick().
void QTest::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Freigeben eines „ key “ mit einem optionalen „ modifier “ auf einem „ window “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor der Schlüssel freigegeben wird.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyPress() und QTest::keyClick().
void QTest::keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Simuliert das Freigeben eines „ key “ mit einem optionalen „ modifier “ auf einem „ window “. Ist „ delay “ größer als 0, wartet der Test „ delay “ Millisekunden, bevor der Schlüssel freigegeben wird.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyClick().
void QTest::keySequence(QWidget *widget, const QKeySequence &keySequence)
Simuliert die Eingabe von „ keySequence “ in „ widget “.
Dies ist eine überladene Funktion.
Siehe auch QTest::keyClick() und QTest::keyClicks().
void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)
Simuliert die Eingabe von „ keySequence “ in „ window “.
Dies ist eine überladene Funktion.
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 einen Mausklick button mit einer 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 und wieder 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)
Simuliert einen Mausklick button mit einem optionalen Modifikator „ stateKey “ auf einer 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 an Millisekunden, bevor die Taste gedrückt und wieder losgelassen wird.
Dies ist eine überladene Funktion.
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 einen Doppelklick mit der 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 vor jedem Drücken und Loslassen die angegebene Anzahl von Millisekunden.
Siehe auch „ QTest::mouseClick()“.
void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Simuliert einen Doppelklick mit der Maus button mit einem optionalen Modifikator „ stateKey “ auf einer window. Die Position des Klicks wird durch pos definiert; die Standardposition ist die Mitte des Fensters. Wenn delay angegeben ist, wartet der Test vor jedem Drücken und Loslassen die angegebene Anzahl an Millisekunden.
Dies ist eine überladene Funktion.
Siehe auch „ QTest::mouseClick()“.
void QTest::mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)
Bewegt den Mauszeiger an eine Koordinate „ widget “. Wenn „ pos “ nicht angegeben ist, wird der Mauszeiger in die Mitte des Widgets bewegt. Wenn eine Verzögerung „ delay “ (in Millisekunden) angegeben wird, wartet das Skript, bevor der Mauszeiger bewegt wird.
void QTest::mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)
Bewegt den Mauszeiger an eine Koordinate „ window “. Wenn „ pos “ nicht angegeben ist, wird der Mauszeiger in die Mitte des Fensters bewegt. Wenn eine Verzögerung „ delay “ (in Millisekunden) angegeben wird, wartet die Funktion, bevor der Mauszeiger bewegt wird.
Dies ist eine überladene Funktion.
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 wird, wartet der Test die angegebene Anzahl an Millisekunden, bevor der Klick ausgelöst 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)
Simuliert das Drücken einer Maus button, optional mit dem Modifikator „ stateKey “, auf einem „ window “. Die Position 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.
Dies ist eine überladene Funktion.
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, wobei optional ein modifier auf einem widget verwendet werden kann. Die Position des Loslassens wird durch pos definiert; die Standardposition ist die Mitte des Widgets. Wenn „ delay “ angegeben wird, wartet der Test die angegebene Zeit in Millisekunden ab, bevor die Taste losgelassen wird; andernfalls wartet er eine Standardzeit (1 ms), die über Befehlszeilenargumente überschrieben werden kann.
Hinweis: Wenn Sie einen Doppelklick durch das individuelle Senden von Ereignissen testen möchten, geben Sie für beide Maus-Loslassen-Ereignisse eine kurze Verzögerung an, die größer ist als der Standardwert. Die Summe der Verzögerungen für Drücken, Loslassen, Drücken und Loslassen muss kleiner sein als QStyleHints::mouseDoubleClickInterval(). Wenn Sie jedoch den Status 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)
Simuliert das Loslassen einer Maus- button -Taste mit einem optionalen Modifikator „ stateKey “ auf einem „ window “. Die Position des Loslassens wird durch „ pos “ definiert; die Standardposition ist die Mitte des Fensters. Wenn „ delay “ angegeben wird, wartet der Test die angegebene Zeit in Millisekunden ab, bevor die Taste losgelassen wird; andernfalls wartet er eine Standardzeit (1 ms), die über Befehlszeilenargumente überschrieben werden kann.
Hinweis: Wenn Sie einen Doppelklick testen möchten, indem Sie Ereignisse einzeln senden, geben Sie für beide Maus-Loslass-Ereignisse eine kurze Verzögerung an, die größer ist als der Standardwert. Die Summe der Verzögerungen für das Drücken, Loslassen, erneute Drücken und erneute Loslassen muss kleiner sein als QStyleHints::mouseDoubleClickInterval(). Wenn Sie jedoch den Status 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);Dies ist eine überladene Funktion.
Siehe auch QTest::mousePress() und QTest::mouseClick().
QTestData &QTest::newRow(const char *dataTag)
Fügt den aktuellen Testdaten eine neue Zeile hinzu.
Die Testausgabe identifiziert den Testlauf mit diesen Testdaten anhand des Namens „ dataTag “.
Gibt eine QTestData-Referenz zurück, die zum Einlesen von Daten verwendet werden kann, wobei für jede Spalte der Tabelle ein Wert bereitgestellt wird.
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 einer Datenfunktion eines Tests aufgerufen werden, die vom Test-Framework ausgelöst wird.
Ein ausführlicheres Beispiel finden Sie unter „Datengesteuertes Testen “.
Siehe auch „ addRow()“, „ addColumn()“ und „ QFETCH()“.
int QTest::qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
Führt die in ` testObject` deklarierten Tests aus. Zudem werden die privaten Slots ` initTestCase()`, ` cleanupTestCase()`, ` init() ` und ` cleanup() ` ausgeführt, sofern sie vorhanden sind. Weitere Informationen finden Sie unter „Erstellen eines Tests “.
Optional können die Befehlszeilenargumente „ argc “ und „ argv “ angegeben werden. Eine Liste der unterstützten Argumente finden Sie unter „Qt Test -Befehlszeilenargumente“.
Das folgende Beispiel führt alle Tests in „ MyTestObject “ aus:
MyTestObject test1;
QTest::qExec(&test1);Diese Funktion gibt 0 zurück, wenn kein Test fehlgeschlagen ist, oder einen Wert ungleich 0, wenn ein oder mehrere Tests fehlgeschlagen sind oder im Falle von unbehandelten Ausnahmen. (Übersprungene Tests haben keinen Einfluss auf den Rückgabewert.)
Für eigenständige Testanwendungen kann das Komfortmakro ` QTEST_MAIN()` verwendet werden, um eine `main()`-Funktion zu deklarieren, die die Befehlszeilenargumente auswertet und die Tests ausführt, wodurch der explizite Aufruf dieser Funktion entfällt.
Der Rückgabewert dieser Funktion ist auch der Beendigungscode 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 zum Protokollieren der Testausgabe in Dateien und zum Ausführen einzelner Testfunktionen sonst nicht korrekt verhalten.
Hinweis: Diese Funktion ist nicht reentrant; es kann jeweils nur ein Test gleichzeitig ausgeführt werden. Ein mit `qExec()` ausgeführter Test kann keinen weiteren Test über `qExec()` ausführen, und Threads dürfen `qExec()` nicht gleichzeitig aufrufen.
Wenn Sie die Argumente programmgesteuert erstellt haben – im Gegensatz zum Abrufen aus den Argumenten von ` main()` – ist es wahrscheinlich sinnvoll, `QTest::qExec(QObject *, const QStringList &)` zu verwenden, da diese Funktion Unicode-sicher ist.
Siehe auch QTEST_MAIN(), QTEST_GUILESS_MAIN() und QTEST_APPLESS_MAIN().
int QTest::qExec(QObject *testObject, const QStringList &arguments)
Verhält sich identisch wie qExec(QObject *, int, char**), akzeptiert jedoch eine Liste „ QStringList “ vom Typ „ arguments “ anstelle einer Liste vom Typ „ char** “.
Dies ist eine überladene Funktion.
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 die letzte Referenz auf den Rückgabewert den Gültigkeitsbereich 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 bei Fehlern den Wert „null“.
[since 6.5] void QTest::qRegisterTestCase(const QString &name, QTest::TestEntryFunction entryFunction)
Registriert den Test name mit der Einstiegsfunktion entryFunction in einem zentralen Testfallregister für die aktuelle Binärdatei.
Der Test name wird angezeigt, wenn die Batch-Test-Binärdatei ohne Parameter ausgeführt wird. Wird die Test-Binärdatei mit dem Wert von argv[1] gleich name ausgeführt, wird entryFunction aufgerufen.
Diese Funktion wurde in Qt 6.5 eingeführt.
[since 6.7] void QTest::qSleep(std::chrono::milliseconds msecs)
Wartet für msecs und blockiert dabei die Ausführung des Tests.
Diese Methode führt keine Ereignisverarbeitung durch und lässt Ihren Test unresponsive. Während des Pausierens kann es zu einem Timeout bei der Netzwerkkommunikation kommen. Verwenden Sie QTest::qWait(), um nicht blockierend zu pausieren.
msecs muss größer als 0 ms sein.
Hinweis: Ab Qt 6.7 wird diese Funktion mithilfe von ` std::this_thread::sleep_for` implementiert, sodass die Genauigkeit der gemessenen Zeit von der Implementierung der Standardbibliothek abhängt. Vor Qt 6.7 rief diese Funktion entweder ` nanosleep() ` unter Unix oder ` Sleep() ` unter Windows auf, sodass die Genauigkeit der in dieser Funktion gemessenen Zeit 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)
Wartet ms Millisekunden und blockiert dabei die Ausführung des Tests.
Entspricht dem Aufruf von:
QTest::qSleep(std::chrono::milliseconds{ms});Dies ist eine überladene Funktion.
[since 6.7] void QTest::qWait(std::chrono::milliseconds msecs)
Wartet auf „ msecs “. Während der Wartezeit werden Ereignisse verarbeitet, und Ihr Test reagiert weiterhin auf Ereignisse der Benutzeroberfläche oder auf Netzwerkkommunikation.
Beispiel:
using namespace std::chrono_literals;
int i = 0;
while (myNetworkServerNotResponding() && i++ < 50)
QTest::qWait(250ms);Der obige Code wartet maximal etwa 12,5 Sekunden lang, bis der Netzwerkserver antwortet.
Die „ QTRY_* “-Makros sind in der Regel die bessere Wahl als „qWait()“. „qWait()“ pausiert immer für die gesamte Timeout-Dauer, was dazu führen kann, dass der Test untätig bleibt und die Ausführung verlangsamt wird.
Die Makros „ QTRY_* “ prüfen die Bedingung so lange, bis sie erfüllt ist oder das Timeout abläuft. Ihr Test wird daher so schnell wie möglich fortgesetzt und bleibt zuverlässiger. Falls die Bedingung weiterhin nicht erfüllt ist, verdoppeln die Makros das Timeout einmalig und melden den neuen Wert, damit Sie ihn anpassen können.
Schreiben Sie beispielsweise den obigen Code wie folgt um:
QTRY_VERIFY_WITH_TIMEOUT(!myNetworkServerNotResponding(), 12.5s);Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch „ QTest::qSleep()“, „ QSignalSpy::wait()“ und „ QTRY_VERIFY_WITH_TIMEOUT()“.
void QTest::qWait(int msecs)
Wartet auf ` msecs`. Entspricht dem Aufruf von:
QTest::qWait(std::chrono::milliseconds{msecs});Dies ist eine überladene Funktion.
[since 6.7] template <typename Functor> bool QTest::qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer(
defaultTryTimeout.load(std::memory_order_relaxed)))
Wartet, bis „ deadline “ abgelaufen ist oder bis „ predicate “ den Wert „true“ zurückgibt – je nachdem, was zuerst eintritt.
Gibt „ true “ zurück, wenn „ predicate “ zu irgendeinem Zeitpunkt „true“ zurückgegeben hat; andernfalls wird „ false “ zurückgegeben.
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 maximal drei Sekunden lang darauf, dass das Objekt bereit ist.
Diese Funktion wurde in Qt 6.7 eingeführt.
template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)
Wartet timeout Millisekunden oder bis die Funktion „ predicate “ den Wert „true“ zurückgibt.
Dies entspricht dem Aufruf von:
qWaitFor(predicate, QDeadlineTimer(timeout));Dies ist eine überladene Funktion.
[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout)
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 davon ausgehen, dass das Widget tatsächlich aktiv ist (d. h. sichtbar ist und den Fokus hat), bevor sie fortfahren.
Hinweis: Die Methode läuft 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 – selbst nachdem die Methode „ true “ zurückgegeben hat.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch „ qWaitForWindowExposed()“ und „ QWidget::isActiveWindow()“.
[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)
Gibt „ true “ zurück, wenn „ window “ innerhalb von „ timeout “ aktiv ist. Andernfalls wird „ false “ zurückgegeben.
Die Methode ist nützlich in Tests, die ` QWindow::show()` aufrufen und darauf angewiesen sind, dass das Fenster tatsächlich aktiv ist (d. h. sichtbar ist und den Fokus hat), bevor sie fortfahren.
Hinweis: Die Methode läuft 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 – sogar nachdem die Methode „ true “ zurückgegeben hat.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch „ qWaitForWindowExposed()“, „ qWaitForWindowFocused()“ und „ QWindow::isActive()“.
[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
bool QTest::qWaitForWindowActive(QWidget *widget, int timeout)
Die Funktion „ timeout “ gibt den Wert in Millisekunden zurück.
Dies ist eine überladene Funktion.
bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
Die Funktion „ timeout “ gibt den Wert in Millisekunden zurück.
Dies ist eine überladene Funktion.
[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout)
Gibt ` true ` zurück, wenn ` widget ` innerhalb von ` timeout ` Millisekunden sichtbar ist. Andernfalls wird ` false` zurückgegeben.
Die Methode ist nützlich in Tests, die ` QWidget::show()` aufrufen und darauf angewiesen sind, dass das Widget tatsächlich sichtbar ist, bevor sie fortfahren.
Hinweis: Ein auf den Bildschirm abgebildetes Fenster gilt möglicherweise dennoch nicht als sichtbar, wenn der Clientbereich des Fensters nicht sichtbar ist, z. B. weil er vollständig von anderen Fenstern verdeckt wird. In solchen Fällen läuft die Methode ab und gibt „ false “ zurück.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch „ qWaitForWindowActive()“, „ QWidget::isVisible()“ und „ QWindow::isExposed()“.
[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)
Gibt „ true “ zurück, wenn „ window “ innerhalb von „ timeout “ verfügbar ist. Andernfalls wird „ false “ zurückgegeben.
Die Methode ist nützlich in Tests, die ` QWindow::show()` aufrufen und darauf angewiesen sind, dass das Fenster tatsächlich sichtbar ist, bevor sie fortfahren.
Hinweis: Ein auf den Bildschirm abgebildetes Fenster gilt möglicherweise dennoch nicht als sichtbar, wenn der Clientbereich des Fensters nicht sichtbar ist, z. B. weil er vollständig von anderen Fenstern verdeckt wird. In solchen Fällen läuft die Methode ab und gibt ` false` zurück.
Diese Funktion wurde in Qt 6.10 eingeführt.
Siehe auch „ qWaitForWindowActive()“ und „ QWindow::isExposed()“.
[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout)
Die „ timeout “ wird in Millisekunden angegeben.
Dies ist eine überladene Funktion.
bool QTest::qWaitForWindowExposed(QWindow *window, int timeout)
Die „ timeout “ wird in Millisekunden angegeben.
Dies ist eine überladene Funktion.
[since 6.7] bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout)
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 darauf angewiesen sind, dass das Widget den Fokus hat (z. B. zum Empfangen von Tastaturereignissen), bevor sie fortfahren.
Hinweis: Die Methode läuft ab und gibt „ false “ zurück, wenn ein anderes Fenster verhindert, dass „ widget “ den Fokus erhält.
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)
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 darauf angewiesen sind, dass das Fenster den Fokus hat (z. B. zum Empfangen von Tastaturereignissen), bevor sie fortfahren.
Hinweis: Die Methode läuft ab und gibt „ false “ zurück, wenn ein anderes Fenster verhindert, dass „ window “ den Fokus erhält.
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().
[since 6.10] bool QTest::qWaitForWindowFocused(QWidget *widget)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
[since 6.10] bool QTest::qWaitForWindowFocused(QWindow *window)
Diese Funktion verwendet die Standard-Zeitüberschreitung von 5 Sekunden.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.10 eingeführt.
void QTest::setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
Legt das Benchmark-Ergebnis für diese Testfunktion auf „ result “ fest.
Verwenden Sie diese Funktion, wenn Sie Benchmark-Ergebnisse melden möchten, ohne das QBENCHMARK-Makro zu verwenden. Verwenden Sie „ metric “, um festzulegen, wie „ Qt Test “ die Ergebnisse interpretieren soll.
Der Kontext für das Ergebnis besteht aus dem Namen der Testfunktion und etwaigen Daten-Tags aus der _data-Funktion. Diese Funktion kann in jeder Testfunktion nur einmal aufgerufen werden; nachfolgende Aufrufe ersetzen die zuvor gemeldeten Ergebnisse.
Beachten Sie, dass das Befehlszeilenargument -iterations bei Testfunktionen ohne das QBENCHMARK-Makro keine Wirkung hat.
[noexcept, since 6.8] void QTest::setThrowOnFail(bool enable)
Aktiviert (enable = true) oder deaktiviert (enable = false) das Auslösen eines Fehlers bei Fehlern in QCOMPARE()/QVERIFY() (im Gegensatz zum bloßen Zurückkehren aus dem unmittelbar umgebenden Funktionskontext).
Die Funktion arbeitet mit Referenzzählung: Wenn Sie diese Funktion N-mal mit ` true` aufrufen, müssen Sie sie N-mal mit ` false ` aufrufen, um wieder an den Ausgangspunkt zurückzukehren.
Dieser Aufruf hat keine Auswirkung, wenn das C++-Makro „ QTEST_THROW_ON_FAIL “ definiert ist.
Hinweis: Um diese Funktion nutzen zu können, müssenSie Ihre Tests mit aktivierten Ausnahmen kompilieren.
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 Auslösen eines Ausnahmes in „ QSKIP()“ (im Gegensatz zum bloßen Verlassen des unmittelbar übergeordneten Funktionskontexts).
Die Funktion arbeitet mit Referenzzählung: Wenn Sie diese Funktion N-mal mit ` true` aufrufen, müssen Sie sie N-mal mit ` false ` aufrufen, um wieder an den Ausgangspunkt zurückzukehren.
Dieser Aufruf hat keine Wirkung, wenn das C++-Makro „ QTEST_THROW_ON_SKIP “ definiert ist.
Hinweis: Um diese Funktion nutzen zu können, müssenSie Ihre Tests mit aktivierten Ausnahmen kompilieren.
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 Zeichenkette zurück, die der Zeichenkette „ ba “ entspricht, dargestellt als durch Leerzeichen getrennte Folge von Hexadezimalzeichen. Wird die Eingabe als zu lang angesehen, wird sie gekürzt. Eine Kürzung wird in der zurückgegebenen Zeichenkette durch drei Punkte am Ende gekennzeichnet. Der Aufrufer ist Eigentümer des zurückgegebenen Zeigers und muss sicherstellen, dass dieser später an den Operator `delete[]` übergeben wird.
length ist die Länge der Zeichenkette ba.
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 in Ihren Test einfügen, um eine ausführliche Ausgabe zu ermöglichen.
Hinweis: Ab Qt 5.5 sollten Sie vorzugsweise eine toString()-Funktion im Namensraum des Typs bereitstellen, anstatt diese Vorlage zu spezialisieren. Wenn Ihr Code weiterhin mit der QTestLib aus Qt 5.4 oder früher kompatibel sein muss, müssen Sie weiterhin die Spezialisierung verwenden.
Hinweis: Der Aufrufer von `toString()` muss die zurückgegebenen Daten mit ` delete[]` löschen. Ihre Implementierung sollte eine Zeichenkette zurückgeben, die mit ` new[] ` oder ` qstrdup()` erstellt wurde. Am einfachsten ist es, ein ` QByteArray ` oder ` QString ` zu erstellen und darauf `QTest::toString()` aufzurufen (siehe zweites Beispiel unten).
Beispiel für die 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 “ im Testprotokoll auszugeben.
Dasselbe Beispiel, jedoch mit Überladung (Qt ≥ 5.5):
char *toString(const MyPoint &point) // should be inside the same namespace as MyPoint
{
return QTest::toString("MyPoint(" +
QByteArray::number(point.x()) + ", " +
QByteArray::number(point.y()) + ')');
}Siehe auch QCOMPARE().
char *toString(QSizePolicy sp)
Gibt eine textuelle Darstellung der Größenrichtlinie „ sp “ zurück.
Dies ist eine überladene Funktion.
char *toString(QSizePolicy::ControlType ct)
Gibt eine textuelle Darstellung des Steuerelementtyps „ ct “ zurück.
Dies ist eine überladene Funktion.
char *toString(QSizePolicy::ControlTypes cts)
Gibt eine textuelle Darstellung der Steuerelementtypen zurück: cts.
Dies ist eine überladene Funktion.
char *toString(QSizePolicy::Policy p)
Gibt eine textuelle Darstellung der Richtlinie „ p “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QByteArray &ba)
Gibt eine textuelle Darstellung des Byte-Arrays „ ba “ zurück.
Dies ist eine überladene Funktion.
Siehe auch ` QTest::toHexRepresentation()`.
char *QTest::toString(const QCborError &c)
Gibt eine textuelle Darstellung des angegebenen CBOR-Fehler c s zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QChar &character)
Gibt eine textuelle Darstellung des angegebenen „ character “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QDate &date)
Gibt eine textuelle Darstellung des angegebenen ` date` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QDateTime &dateTime)
Gibt eine textuelle Darstellung des durch ` dateTime` angegebenen Datums und der Uhrzeit zurück.
Dies ist eine überladene Funktion.
[since 6.5] char *QTest::toString(const QKeySequence &ks)
Gibt eine textuelle Darstellung der Schlüsselsequenz „ ks “ zurück.
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.5 eingeführt.
char *QTest::toString(const QLatin1StringView &string)
Gibt eine textuelle Darstellung des angegebenen ` string` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QPoint &point)
Gibt eine textuelle Darstellung des angegebenen ` point` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QPointF &point)
Gibt eine textuelle Darstellung des angegebenen „ point “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QRect &rectangle)
Gibt eine textuelle Darstellung des angegebenen ` rectangle` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QRectF &rectangle)
Gibt eine textuelle Darstellung des angegebenen „ rectangle “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QSize &size)
Gibt eine textuelle Darstellung der angegebenen ` size` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QSizeF &size)
Gibt eine textuelle Darstellung des angegebenen ` size` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QString &string)
Gibt eine textuelle Darstellung der angegebenen ` string` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QStringView &string)
Gibt eine textuelle Darstellung des angegebenen ` string` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QTime &time)
Gibt eine textuelle Darstellung des angegebenen ` time` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QUrl &url)
Gibt eine textuelle Darstellung des angegebenen „ url “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QUuid &uuid)
Gibt eine textuelle Darstellung des angegebenen ` uuid` zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QVariant &variant)
Gibt eine textuelle Darstellung des angegebenen „ variant “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QVector2D &v)
Gibt eine textuelle Darstellung des 2D-Vektors v zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QVector3D &v)
Gibt eine textuelle Darstellung des 3D-Vektors „ v “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(const QVector4D &v)
Gibt eine textuelle Darstellung des 4D-Vektors ` v` zurück.
Dies ist eine überladene Funktion.
template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)
Gibt eine textuelle Darstellung von „ pair “ zurück.
Dies ist eine überladene Funktion.
template <typename... Types> char *QTest::toString(const std::tuple<Types...> &tuple)
Gibt eine textuelle Darstellung des angegebenen „ tuple “ zurück.
Dies ist eine überladene Funktion.
char *QTest::toString(std::nullptr_t)
Gibt eine Zeichenfolge zurück, die „ nullptr “ enthält.
Dies ist eine überladene Funktion.
QTest::QTouchEventWidgetSequence QTest::touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
Erstellt und gibt ein ` QTouchEventSequence ` für das ` device ` zurück, um Ereignisse für ` widget` zu simulieren.
Beim Hinzufügen von Touch-Ereignissen zur Sequenz wird „ widget “ außerdem verwendet, um die angegebene Position in Bildschirmkoordinaten umzuwandeln, sofern in den jeweiligen Aufrufen von „press()“, „move()“ usw. kein anderes Widget angegeben wird.
Die Touch-Ereignisse werden an das Ereignissystem übergeben, wenn der Destruktor von ` QTouchEventSequence ` aufgerufen wird (d. h. wenn der Gültigkeitsbereich des zurückgegebenen Objekts endet), es sei denn, ` autoCommit ` ist auf `false` gesetzt. Wenn ` autoCommit ` auf `false` gesetzt 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)
Erstellt und gibt ein ` QTouchEventSequence ` für das ` device ` zurück, um Ereignisse für ` window` zu simulieren.
Beim Hinzufügen von Touch-Ereignissen zur Sequenz wird „ window “ außerdem verwendet, um die übergebene Position in Bildschirmkoordinaten umzuwandeln, sofern in den jeweiligen Aufrufen von „press()“, „move()“ usw. kein anderes Fenster angegeben wird.
Die Touch-Ereignisse werden an das Ereignissystem übergeben, wenn der Destruktor von ` QTouchEventSequence ` aufgerufen wird (d. h., wenn der Gültigkeitsbereich des zurückgegebenen Objekts endet), es sei denn, ` autoCommit ` ist auf `false` gesetzt. Wenn ` autoCommit ` auf `false` gesetzt 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 eine Drehung nach vorne, ein negativer Wert eine Drehung nach hinten. „ pixelDelta “ enthält die Bildlaufdistanz in Pixeln auf dem Bildschirm. Dieser Wert kann null sein. Die Tastaturzustände zum Zeitpunkt des Ereignisses werden durch „ stateKey “ angegeben. Die Bildlaufphase des Ereignisses wird durch „ phase “ angegeben.
Diese Funktion wurde in Qt 6.8 eingeführt.
Makro-Dokumentation
QBENCHMARK
Dieses Makro dient dazu, die Leistung von Code im Rahmen eines Tests zu messen. Der zu testende Code ist in einem Codeblock enthalten, der auf dieses Makro folgt.
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 dazu, die Leistung eines Codeblocks durch einmalige Ausführung zu messen.
Dieses Makro wird verwendet, um die Leistung von Code innerhalb eines Tests zu messen. Der zu messende Code ist in einem Codeblock enthalten, der auf dieses 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 vom ausgewählten Backend gemessen zu werden.
Siehe auch „Erstellen eines Benchmarks “ und „Schreiben eines Benchmarks“.
QCOMPARE(actual, expected)
Das Makro QCOMPARE() vergleicht einen Wert von „ actual “ mit einem Wert von „ expected “ unter Verwendung des Gleichheitsoperators. Wenn „ actual “ und „ expected “ übereinstimmen, wird die Ausführung fortgesetzt. Ist dies nicht der Fall, wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Beachten Sie stets die Parametersemantik von QCOMPARE(). Der erste an die Funktion übergebene Parameter sollte immer der vom zu testenden Code erzeugte Istwert sein, 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 wird, kann die Fehlersuche bei einem fehlgeschlagenen Test verwirrend sein, und Tests, die den Wert Null erwarten, können aufgrund von Rundungsfehlern fehlschlagen.
QCOMPARE() versucht, den Inhalt der Werte auszugeben, wenn der Vergleich fehlschlägt, sodass aus dem Testprotokoll ersichtlich ist, warum der Vergleich fehlgeschlagen ist.
Beispiel:
Beim Vergleich von Gleitkomma-Typen (float, double und qfloat16) wird „ qFuzzyCompare()“ für endliche Werte verwendet. Ist „ qFuzzyIsNull()“ für beide Werte wahr, gelten sie ebenfalls als gleich. Unendlichkeiten stimmen überein, wenn sie das gleiche Vorzeichen haben, und jeder NaN als tatsächlicher Wert stimmt mit jedem NaN als erwartetem Wert überein (auch wenn NaN != NaN gilt, 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 Makro-Argumenttrennzeichen interpretiert:
#define ARG(...) __VA_ARGS__
QCOMPARE(QFontDatabase::standardSizes(), ARG({8, 10, 12, 16, 20, 24}));
#undef ARGHinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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;
}Der Rückgabewert von ` toString() ` muss ein ` new char []` sein. Das heißt, er muss mit ` delete[] ` (anstelle von ` free() ` oder einfach ` delete`) freigegeben werden, sobald der aufrufende Code damit 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.9] QCOMPARE_3WAY(lhs, rhs, order)
Das Makro QCOMPARE_3WAY() wendet den Drei-Wege-Vergleichsoperator <=> auf die Eingabeausdrücke lhs und rhs an und prüft, ob das Ergebnis order ist. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen. Das Makro akzeptiert als Argument „ order “ nur Typen der Ordnungsklassen „Qt::“ und „std::“; andernfalls wird ein Assert ausgelöst.
Hinweis: „ order “ kann ein „Qt::“-Ordnungstyp sein, auch wenn „ decltype(lhs <=> rhs) “ ein „std“-Ordnungstyp ist. Das Ergebnis der Operation „ decltype(lhs <=> rhs) “ sollte dieselbe Stärke wie „ order “ aufweisen. Andernfalls führt die Anwendung des Makros zu einem Kompilierungsfehler. Wenn beispielsweise das Ergebnis von „ decltype(lhs <=> rhs) “ einen schwachen Ordnungstyp aufweist, darf das Argument „ order “ keine partiellen oder starken Ordnungstypen enthalten.
Hinweis: Das Makro funktioniert nur, wenn der Compiler den Operator „ <=> “ unterstützt; andernfalls wird statisch festgestellt, dass die erforderliche Funktion nicht verfügbar ist. Überprüfen Sie vor der Verwendung des Makros immer, ob „ __cpp_lib_three_way_comparison “ definiert ist, und verwenden Sie „QSKIP“, falls dies nicht der Fall ist.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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.9 eingeführt.
[since 6.4] QCOMPARE_EQ(computed, baseline)
Das Makro QCOMPARE_EQ() überprüft mithilfe des Gleichheitsoperators, ob computed gleich baseline ist. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen ähnelt dies dem Aufruf von ` QVERIFY(computed == baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework aufgerufen wird.
Für Ihre eigenen Klassen können Sie ` QTest::toString()` überladen, um Werte für die Ausgabe im Testprotokoll zu formatieren.
Hinweis: Im Gegensatz zu ` QCOMPARE()` bietet dieses Makro keine Überladungen für benutzerdefinierte Typen und Zeiger. Wenn Sie also beispielsweise zwei ` const char * `-Werte als Parameter übergeben, werden Zeiger verglichen, während ` QCOMPARE()` einen Vergleich von Zeichenketten 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 mithilfe des „Größer-oder-gleich“-Operators, ob computed mindestens baseline ist. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen entspricht dies dem Aufruf von ` QVERIFY(computed >= baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 mithilfe des Größer-als-Operators, ob computed größer ist als baseline. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen ähnelt dies dem Aufruf von ` QVERIFY(computed > baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 mithilfe des „Kleiner-oder-gleich“-Operators, ob computed höchstens baseline beträgt. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen ähnelt dies dem Aufruf von ` QVERIFY(computed <= baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 mithilfe des Kleiner-als-Operators, ob computed kleiner ist als baseline. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen ähnelt dies dem Aufruf von ` QVERIFY(computed < baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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() prüft mithilfe des Ungleichheitsoperators, ob computed nicht gleich baseline ist. Ist dies der Fall, wird die Ausführung fortgesetzt. Andernfalls wird ein Fehler im Testprotokoll vermerkt und die Testfunktion kehrt zurück, ohne weitere Prüfungen durchzuführen.
Im Allgemeinen entspricht dies dem Aufruf von ` QVERIFY(computed != baseline); `, gibt jedoch im Fehlerfall eine formatierte Fehlermeldung aus, in der die Argumentausdrücke und -werte von ` computed ` und ` baseline ` aufgeführt werden.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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() kennzeichnet den nächsten Aufruf von QCOMPARE() oder QVERIFY() als erwarteten Fehler. Anstatt einen Fehler in das Testprotokoll einzutragen, wird ein erwarteter Fehler gemeldet.
Wenn ein QVERIFY() oder QCOMPARE() als erwarteter Fehler markiert ist, aber stattdessen erfolgreich durchläuft, wird ein unerwarteter Durchlauf (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 dem 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. Das „ mode “ wird unabhängig davon angewendet, ob der erwartete Testfehler auftritt.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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. Ist die Variable „ i “ hingegen 42, wird stattdessen ein unerwarteter Erfolg geschrieben. Die Funktion QEXPECT_FAIL() hat keinen Einfluss auf die zweite Anweisung „ QCOMPARE()“ im Beispiel.
Beispiel 2:
QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42);Die obige Testfunktion wird bei der Testdateneingabe „ data27 “ nicht weiter ausgeführt (unabhängig vom Wert von „ i “).
Siehe auch QTest::TestFailMode, QVERIFY() und QCOMPARE().
QFAIL(message)
Mit diesem Makro lässt sich ein Testfehler erzwingen. Die Testausführung wird beendet und die Fehler message en werden dem Testprotokoll angehängt.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework aufgerufen wird.
Beispiel:
if (sizeof(int) != 4)
QFAIL("This test has not been ported to this platform yet.");QFETCH(type, name)
Das „fetch“-Makro legt auf dem Stack eine lokale Variable namens „ name “ vom Typ „ type “ an. Die „ name “ und „ type “ müssen mit einer Spalte aus der Datentabelle des Tests übereinstimmen. Dies wird überprüft, und der Test wird abgebrochen, wenn die Überprüfung fehlschlägt.
Angenommen, ein Test verfügt über folgende 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 bestehen aus zwei Elementen: einem „ QString “ namens „ aString “ und einer Ganzzahl namens „ 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 vom Test-Framework aufgerufen wird. Die Testfunktion muss über eine _data-Funktion verfügen.
QFETCH_GLOBAL(type, name)
Dieses Makro ruft eine Variable namens „ name “ vom Typ „ type “ aus einer Zeile der globalen Datentabelle ab. Die Werte „ name “ und „ type “ müssen mit einer Spalte in der globalen Datentabelle übereinstimmen. Dies wird überprüft, und der Test wird abgebrochen, wenn die Überprüfung fehlschlägt.
Angenommen, ein Test verfügt über folgende 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 testeigenen Daten bestehen aus einer einzelnen Zahl pro Zeile. In diesem Fall liefert initTestCase_data() zusätzlich eine Locale pro Zeile. Daher wird dieser Test mit jeder Kombination aus einer Locale aus der globalen Tabelle und einer Zahl aus der lokalen Tabelle ausgeführt. Bei vier Zeilen in der globalen Tabelle und drei in der lokalen Tabelle wird die Testfunktion somit 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);
}Die Locale wird mit QFETCH_GLOBAL() aus der globalen Datentabelle gelesen, und die Zahl wird mit QFETCH() aus der lokalen Datentabelle gelesen.
Hinweis: Dieses Makro kann nur in Testmethoden einer Klasse verwendet werden, die über eine ` initTestCase_data() `-Methode verfügt.
QFINDTESTDATA(filename)
Gibt ein ` QString ` für die Testdatendatei zurück, auf die ` filename` verweist, oder ein leeres ` QString `, falls die Testdatendatei nicht gefunden werden konnte.
Dieses Makro ermöglicht es dem Test, Daten aus einer externen Datei zu laden, ohne einen absoluten Dateinamen fest im Test zu hinterlegen oder relative Pfade zu verwenden, die fehleranfällig sein können.
Der zurückgegebene Pfad ist der erste Pfad aus der folgenden Liste, der zu einer vorhandenen Datei oder einem vorhandenen Verzeichnis führt:
- filename relativ zu QCoreApplication::applicationDirPath() (nur wenn ein „ QCoreApplication “- oder „ QApplication “-Objekt erstellt wurde).
- filename relativ zum Standardinstallationsverzeichnis des Tests (QLibraryInfo::TestsPath mit dem Testfallnamen in Kleinbuchstaben als Anhang).
- filename relativ zum Verzeichnis, das die Quelldatei enthält, von der aus QFINDTESTDATA aufgerufen wird.
Wenn die angegebene Datei/das angegebene Verzeichnis an keinem dieser Speicherorte vorhanden ist, wird eine Warnung in das Testprotokoll geschrieben.
Beispielsweise in diesem Code:
bool tst_MyXmlParser::parse()
{
MyXmlParser parser;
QString input = QFINDTESTDATA("testxml/simple1.xml");
QVERIFY(parser.parse(input));
}Die Testdatendatei wird als die erste vorhandene Datei aus folgendem Pfad ermittelt:
/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
Dadurch kann der Test seine Testdaten finden, unabhängig davon, ob der Test installiert wurde und ob der Build-Baum des Tests mit dem Quellbaum des Tests übereinstimmt.
Hinweis: Einezuverlässige Erkennung der Testdaten aus dem Quellverzeichnis setzt entweder die Verwendung von qmake voraus oder die Definition des Makros ` QT_TESTCASE_BUILDDIR `, das auf das Arbeitsverzeichnis verweist, aus dem der Compiler aufgerufen wird, oder es werden dem Compiler ausschließlich absolute Pfade zu den Quelldateien übergeben. Andernfalls kann der absolute Pfad des Quellverzeichnisses nicht ermittelt werden.
Hinweis: Das Makro „ QT_TESTCASE_BUILDDIR “ wird auch implizit definiert, wenn CMake verwendet wird und das Modul „ QtTest “ mit dem Ziel verknüpft ist. Sie können den Standardwert von „ QT_TESTCASE_BUILDDIR “ ändern, indem Sie die Eigenschaft „QT_TESTCASE_BUILDDIR“ für das Ziel festlegen.
Hinweis: Bei Tests, die das Makro „ QTEST_APPLESS_MAIN()“ zur Generierung einer „ main() “-Funktion verwenden, versucht „ QFINDTESTDATA “ nicht, Testdaten relativ zu „ QCoreApplication::applicationDirPath()“ zu finden. In der Praxis bedeutet dies, dass Tests, die „ QTEST_APPLESS_MAIN() “ verwenden, ihre Testdaten nicht finden können, wenn sie aus einem Schatten-Build-Baum heraus ausgeführt werden.
QSKIP(description)
Wird das Makro QSKIP() aus einer Testfunktion aufgerufen, bricht es die Ausführung des Tests ab, ohne einen Fehler im Testprotokoll zu vermerken. Sie können es verwenden, um Tests zu überspringen, die in der aktuellen Konfiguration keinen Sinn ergeben würden. Beispielsweise könnte ein Test zur Schriftartdarstellung 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.
Handelt es sich um einen datengesteuerten Test, überspringt jeder Aufruf von QSKIP() in der Testfunktion nur die aktuelle Zeile der Testdaten; ein bedingungsloser Aufruf von QSKIP() erzeugt daher für jede Zeile der Testdaten eine Überspringungsmeldung im Testprotokoll.
Wird das Makro QSKIP() aus einer „ _data “-Funktion aufgerufen, bricht es die Ausführung der Funktion „ _data “ ab und verhindert die Ausführung der zugehörigen Testfunktion. Dadurch wird ein datengesteuerter Test vollständig übersprungen. Um einzelne Zeilen zu überspringen, machen Sie diese bedingt, indem Sie in der Funktion „ _data “ anstelle von QSKIP() in der Testfunktion ein einfaches „ if (condition) newRow(...) << ... “ verwenden.
Wird das Makro QSKIP() von initTestCase_data() aufgerufen, überspringt es alle Test- und „ _data “-Funktionen. Wird es von initTestCase() aufgerufen, wenn kein „ initTestCase_data() “ vorhanden ist oder wenn dort nur eine Zeile eingerichtet wird, überspringt QSKIP() ebenfalls den gesamten Test. Enthält „ initTestCase_data() “ jedoch mehr als eine Zeile, wird „ initTestCase() “ (gefolgt von den einzelnen Tests und schließlich dem Abschluss) einmal pro Zeile aufgerufen. Daher überspringt ein Aufruf von „QSKIP()“ in „ initTestCase() “ lediglich alle Testfunktionen für die aktuelle Zeile der globalen Daten, die durch „ initTestCase_data() “ eingerichtet wurde.
Hinweis: Dieses Makro kann nur in einer Testfunktion oder einer „ _data “-Funktion verwendet werden, die vom Test-Framework aufgerufen wird.
Beispiel:
if (!QSqlDatabase::drivers().contains("SQLITE"))
QSKIP("This test requires the SQLITE database driver");Bekannte Fehler überspringen
Wenn ein Test einen bekannten Fehler aufdeckt, der nicht sofort behoben wird, verwenden Sie das Makro ` QEXPECT_FAIL()`, um den Fehler zu dokumentieren und die Bug-Tracking-ID für das bekannte Problem anzugeben. Wenn der Test ausgeführt wird, werden erwartete Fehler in der Testausgabe als „XFAIL“ gekennzeichnet und bei der Festlegung des Rückgabecodes des Testprogramms nicht als Fehler gezählt. Tritt ein erwarteter Fehler nicht auf, wird in der Testausgabe „XPASS“ (unerwarteter Erfolg) gemeldet und als Testfehler gezählt.
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. Wird „QSKIP()“ verwendet, gibt es keinen Hinweis darauf, den Test zu überarbeiten oder wieder zu aktivieren; ohne dies werden nachfolgende Regressionen nicht gemeldet.
Siehe auch „ QEXPECT_FAIL()“ und „Auswahl geeigneter Mechanismen zum Ausschluss von Tests“.
QTEST(actual, testElement)
QTEST() ist ein Komfortmakro für QCOMPARE(), das den Wert actual mit dem Element testElement aus den Testdaten vergleicht. Ist kein solches Element vorhanden, löst der Test eine Assertion aus.
Ansonsten verhält sich QTEST() genau wie QCOMPARE().
Anstatt zu schreiben:
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()`, instanziiert jedoch kein ` QApplication `-Objekt. Verwenden Sie dieses Makro für wirklich einfache, eigenständige Tests ohne grafische Benutzeroberfläche.
Siehe auch ` QTEST_MAIN()`.
QTEST_GUILESS_MAIN(TestClass)
Implementiert eine main()-Funktion, die ein QCoreApplication -Objekt und das TestClass instanziiert und alle Tests in der Reihenfolge ihrer Definition ausführt. Verwenden Sie dieses Makro, um eigenständige ausführbare Dateien zu erstellen.
Verhält sich wie ` QTEST_MAIN()`, instanziiert jedoch ein ` QCoreApplication ` anstelle des ` QApplication `-Objekts. Verwenden Sie dieses Makro, wenn Ihr Testfall keine Funktionen von ` QApplication` benötigt, die Ereignisschleife jedoch weiterhin erforderlich ist.
Siehe auch QTEST_MAIN().
QTEST_MAIN(TestClass)
Implementiert eine main()-Funktion, die ein Anwendungsobjekt und das „ TestClass “ instanziiert und alle Tests in der Reihenfolge ihrer Definition ausführt. Verwenden Sie dieses Makro, um eigenständige ausführbare Dateien zu erstellen.
Wenn „ QT_WIDGETS_LIB “ definiert ist, ist das Anwendungsobjekt ein „ QApplication “; wenn „ QT_GUI_LIB “ definiert ist, ist das Anwendungsobjekt ein „ QGuiApplication “; andernfalls ist es ein „ QCoreApplication “. Wenn qmake verwendet wird und die Konfiguration „ QT += widgets “ enthält, wird „ QT_WIDGETS_LIB “ automatisch definiert. Ebenso wird, wenn qmake verwendet wird und die Konfiguration „ QT += gui “ enthält, „ QT_GUI_LIB “ automatisch definiert.
Beispiel:
QTEST_MAIN(TestQString)Siehe auch QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN() und QTest::qExec().
[since 6.8] QTEST_THROW_ON_FAIL
Wenn definiert, lösen „ QCOMPARE()“ / „QVERIFY()“ usw. bei einem Fehler immer einen Ausnahmewurf aus. „ QTest::setThrowOnFail()“ hat dann keine Wirkung mehr.
Die Definition dieses Makros ist sinnvoll, wenn Sie QCOMPARE() oder QVERIFY() in Funktionen verwenden möchten, deren Rückgabetyp nichtvoid ist. Ohne die Definition dieses Makros wird beispielsweise ` QCOMPARE()` zu einer Anweisung mit ` return;` erweitert, sodass es nicht in Funktionen (oder Lambdas) verwendet werden kann, die etwas anderes als ` void` zurückgeben, z. B. ` QString`. Dies gilt auch für den Fall, in dem das Auslösen von Ausnahmen nur zur Laufzeit aktiviert ist (mithilfe von ` QTest::setThrowOnFail(true)`). Ist dieses Makro definiert, wird „ QCOMPARE()“ stattdessen zu einer Anweisung ohne „ return; “ expandiert, die von jeder Funktion aus verwendet werden kann.
Dieses Makro wurde in Qt 6.8 eingeführt.
[since 6.8] QTEST_THROW_ON_SKIP
Wenn „ QSKIP()“ definiert ist, löst es immer einen Fehler aus. „ QTest::setThrowOnSkip()“ hat dann keine Wirkung mehr.
Die Definition dieses Makros ist sinnvoll, wenn Sie ` QSKIP()` in Funktionen verwenden möchten, deren Rückgabetyp nicht `void ` ist. Ist dieses Makro nicht definiert, wird beispielsweise ` QSKIP()` zu einer Anweisung erweitert, die ` return;` enthält, sodass es nicht in Funktionen (oder Lambdas) verwendet werden kann, die etwas anderes als ` void` zurückgeben, z. B. ` QString`. Dies schließt den Fall ein, in dem das Auslösen von Ausnahmen nur zur Laufzeit aktiviert ist (mithilfe von ` QTest::setThrowOnSkip(true)`). Ist dieses Makro definiert, wird ` QSKIP()` stattdessen zu einer Anweisung ohne ` return;` erweitert, die von jeder Funktion aus verwendet werden kann.
Dieses Makro wurde in Qt 6.8 eingeführt.
QTRY_COMPARE(actual, expected)
Führt einen Vergleich der Werte „ actual “ und „ expected “ durch, indem die Funktion „ QTRY_COMPARE_WITH_TIMEOUT()“ mit einer Zeitüberschreitung von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_EQ_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_EQ()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ wiederholt durch, bis entweder der Vergleich „ true “ zurückgibt oder das „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen werden Ereignisse verarbeitet. Wird das Timeout erreicht, wird im Testprotokoll ein Fehler vermerkt und der Test wird nicht weiter ausgeführt.
Seit Qt 6.8 kann das „ timeout “ auch ein „std::chrono “-Literal wie beispielsweise „ 2s “ sein.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_GE_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_GE()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ wiederholt durch, bis entweder der Vergleich „ true “ zurückgibt oder die „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen 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 der Wert „ timeout “ auch ein Literal vom Typ „std::chrono “ sein, beispielsweise „ 2s “.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_GT_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_GT()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ wiederholt durch, bis entweder der Vergleich „ true “ zurückgibt oder das „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen werden Ereignisse verarbeitet. Wird das Timeout erreicht, wird ein Fehler im Testprotokoll vermerkt und der Test wird nicht weiter ausgeführt.
Seit Qt 6.8 kann der Wert „ timeout “ auch ein Literal vom Typ „std::chrono “ sein, wie beispielsweise „ 2s “.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_LE_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_LE()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ wiederholt durch, bis entweder der Vergleich „ true “ zurückgibt oder die „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen 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 das ` timeout ` auch ein Literal vom Typ `std::chrono ` sein, wie beispielsweise ` 2s`.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_LT_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_LT()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ wiederholt durch, bis entweder der Vergleich „ true “ zurückgibt oder die „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen 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 Literal vom Typ „std::chrono “ sein, wie beispielsweise „ 2s “.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 „ QTRY_COMPARE_NE_WITH_TIMEOUT “ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ähnelt „ QCOMPARE_NE()“, führt jedoch den Vergleich der Werte „ computed “ und „ baseline “ so lange wiederholt durch, bis entweder der Vergleich „ true “ ergibt oder die „ timeout “ (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen 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 der Wert „ timeout “ auch ein Literal vom Typ „std::chrono “ sein, wie beispielsweise „ 2s “.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 ` QCOMPARE()`, führt jedoch den Vergleich der Werte ` actual ` und ` expected ` wiederholt durch, bis entweder beide Werte gleich sind oder das ` timeout ` (in Millisekunden) erreicht ist. Zwischen den einzelnen Vergleichen werden Ereignisse verarbeitet. Wird das Timeout erreicht, wird ein Fehler im Testprotokoll vermerkt und der Test wird nicht weiter ausgeführt.
Seit Qt 6.8 kann der Wert „ timeout “ auch ein Literal vom Typ „std::chrono “ sein, wie beispielsweise „ 2s “.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework aufgerufen wird.
Siehe auch QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() und QEXPECT_FAIL().
QTRY_VERIFY2(condition, message)
Überprüft die Datei „ condition “, indem die Funktion „ QTRY_VERIFY2_WITH_TIMEOUT()“ mit einem Timeout von fünf Sekunden aufgerufen wird. Ist „ condition “ danach immer noch „false“, wird „ message “ ausgegeben. „ 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 Test-Framework aufgerufen wird.
Siehe auch „ QTRY_VERIFY2_WITH_TIMEOUT()“, „ QTRY_VERIFY()“, „ QVERIFY()“, „ QCOMPARE()“, „ QTRY_COMPARE()“ und „ QEXPECT_FAIL()“.
QTRY_VERIFY(condition)
Überprüft die URL „ condition “, indem die Funktion „ QTRY_VERIFY_WITH_TIMEOUT()“ mit einem Timeout von fünf Sekunden aufgerufen wird.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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` ähnelt ` QTRY_VERIFY_WITH_TIMEOUT()`, mit dem Unterschied, dass es eine ausführliche Fehlermeldung ` message ` ausgibt, wenn ` condition ` nach Ablauf der angegebenen Zeit ` timeout ` (in Millisekunden) immer noch `false` ist. ` message ` ist eine einfache C-Zeichenkette.
Seit Qt 6.8 kann der „ timeout “ auch ein „std::chrono “-Literal sein, wie beispielsweise „ 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 Test-Framework 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 ` QVERIFY()`, überprüft jedoch wiederholt ` condition `, bis entweder die Bedingung wahr wird oder die ` timeout ` (in Millisekunden) erreicht ist. Zwischen den einzelnen Auswertungen werden Ereignisse verarbeitet. Wird das 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 wie „ 2s “ sein.
Hinweis: Dieses Makro kann nur in einer Testfunktion verwendet werden, die vom Test-Framework 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 einen ` message ` zurückgibt, wenn ` condition ` falsch ist. Der ` message ` ist eine einfache C-Zeichenkette.
Die Meldung kann auch über einen Funktionsaufruf abgerufen werden, der eine einfache C-Zeichenkette erzeugt, beispielsweise „ qPrintable()“, angewendet auf eine „ QString “, die auf jede der üblichen Weisen erstellt werden kann, einschließlich der Anwendung von „ .args() “ zur Formatierung bestimmter Daten.
Beispiel:
QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist.");Wenn Sie beispielsweise ein Dateiobjekt haben und dessen Funktion ` open() ` testen möchten, könnten Sie einen Test mit einer Anweisung wie der folgenden 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. ()
Falls Sie aus den getesteten Werten eine aussagekräftigere Fehlermeldung erstellen können, können Sie ` QVERIFY2() ` verwenden, um diese Meldung zusammen mit Ihrer Testbedingung zu übergeben und so im Fehlerfall eine aussagekräftigere Meldung bereitzustellen:
QVERIFY2(file.open(QIODevice::WriteOnly),
qPrintable(QString("open %1: %2")
.arg(file.fileName()).arg(file.errorString())));Wird dieser Zweig im Qt-CI-System getestet, wird die oben beschriebene 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 Bedingung „ condition “ wahr ist oder nicht. Ist sie wahr, wird die Ausführung fortgesetzt. Ist sie nicht wahr, wird ein Fehler im Testprotokoll vermerkt 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 vom Test-Framework aufgerufen wird.
Der folgende Code zeigt beispielsweise, wie dieses Makro verwendet wird, um zu überprüfen, ob ein ` QSignalSpy `-Objekt gültig ist:
QVERIFY(spy.isValid());Verwenden Sie für weitere Informationen zum Fehler „ QCOMPARE(x, y) “ anstelle von „ QVERIFY(x == y) “, da es bei einem fehlgeschlagenen Vergleich sowohl den erwarteten als auch den tatsächlichen Wert meldet.
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, eine von diesem Ausdruck ausgelöste Ausnahme abzufangen.
Es gibt mehrere mögliche Ergebnisse:
- Wenn der Ausdruck eine Ausnahme auslöst, die entweder mit ` exceptiontype ` identisch ist oder von ` exceptiontype` abgeleitet ist, wird die Ausführung fortgesetzt.
- Andernfalls – wenn der Ausdruck keine Ausnahme auslöst oder die ausgelöste Ausnahme von
std::exceptionabgeleitet ist – wird ein Fehler im Testprotokoll vermerkt und das Makro kehrt vorzeitig (aus der umschließenden Funktion) zurück. - Wenn die ausgelöste Ausnahme weder von
std::exceptionnoch von exceptiontype abgeleitet ist, wird ein Fehler im Testprotokoll vermerkt, und die Ausnahme wird erneut ausgelöst. Dies vermeidet Probleme, beispielsweise mit pthread-Abbruchausnahmen.
Das Makro verwendet variadische Argumente, sodass der Ausdruck Kommas enthalten kann, die der Präprozessor als Argumenttrenner 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 Test-Framework 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, alle von diesem Ausdruck ausgelösten Ausnahmen abzufangen.
Es gibt mehrere mögliche 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 vermerkt und das Makro kehrt vorzeitig zurück (impliziter Rückgabebefehl aus der umschließenden Funktion). - Wird eine Ausnahme abgefangen, die nicht von `
std::exception` stammt, wird ein Fehler im Testprotokoll vermerkt und die Ausnahme erneut ausgelöst. Dadurch werden Probleme beispielsweise mit `pthread`-Abbruchausnahmen vermieden.
Das Makro verwendet variadische Argumente, sodass 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 Test-Framework aufgerufen wird.
Dieses Makro wurde in Qt 6.3 eingeführt.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.