Sur cette page

QTest Namespace

L'espace de noms QTest contient toutes les fonctions et déclarations liées à Qt Test. En savoir plus...

En-tête : #include <QTest>
CMake : find_package(Qt6 REQUIRED COMPONENTS Test)
target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake : QT += testlib

Classes

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

Types

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 }

Variables

(since 6.11) std::atomic<std::chrono::milliseconds> defaultTryTimeout

Fonctions

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)

Macros

QBENCHMARK
QBENCHMARK_ONCE
QCOMPARE(réel, attendu)
(since 6.9) QCOMPARE_3WAY(côté gauche, côté droit, ordre)
(since 6.4) QCOMPARE_EQ(calculé, référence)
(since 6.4) QCOMPARE_GE(calculé, de référence)
(since 6.4) QCOMPARE_GT(calculé, de référence)
(since 6.4) QCOMPARE_LE(calculé, de référence)
(since 6.4) QCOMPARE_LT(calculé, référence)
(since 6.4) QCOMPARE_NE(calculé, de référence)
QEXPECT_FAIL(index de données, commentaire, mode)
QFAIL(message)
QFETCH(type, nom)
QFETCH_GLOBAL(type, nom)
QFINDTESTDATA(nom de fichier)
QSKIP(description)
QTEST(réel, élément de test)
QTEST_APPLESS_MAIN(classeDeTest)
QTEST_GUILESS_MAIN(TestClass)
QTEST_MAIN(classeDeTest)
(since 6.8) QTEST_THROW_ON_FAIL
(since 6.8) QTEST_THROW_ON_SKIP
QTRY_COMPARE(réel, attendu)
(since 6.4) QTRY_COMPARE_EQ(calculé, de référence)
(since 6.4) QTRY_COMPARE_EQ_WITH_TIMEOUT(calculé, de référence, délai d’expiration)
(since 6.4) QTRY_COMPARE_GE(calculé, valeur de référence)
(since 6.4) QTRY_COMPARE_GE_WITH_TIMEOUT(calculé, valeur de référence, délai d'expiration)
(since 6.4) QTRY_COMPARE_GT(calculé, de référence)
(since 6.4) QTRY_COMPARE_GT_WITH_TIMEOUT(calculé, valeur de référence, délai d'expiration)
(since 6.4) QTRY_COMPARE_LE(calculé, de référence)
(since 6.4) QTRY_COMPARE_LE_WITH_TIMEOUT(calculé, référence, délai d'expiration)
(since 6.4) QTRY_COMPARE_LT(calculé, de référence)
(since 6.4) QTRY_COMPARE_LT_WITH_TIMEOUT(calculé, de référence, délai d'expiration)
(since 6.4) QTRY_COMPARE_NE(calculé, de référence)
(since 6.4) QTRY_COMPARE_NE_WITH_TIMEOUT(calculé, de référence, délai d'expiration)
QTRY_COMPARE_WITH_TIMEOUT(réel, attendu, délai d'expiration)
QTRY_VERIFY2(condition, message)
QTRY_VERIFY(condition)
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, délai d'expiration)
QTRY_VERIFY_WITH_TIMEOUT(condition, délai d'expiration)
QVERIFY2(condition, message)
QVERIFY(condition)
(since 6.3) QVERIFY_THROWS_EXCEPTION(type d'exception, ...)
(since 6.3) QVERIFY_THROWS_NO_EXCEPTION(...)

Description détaillée

Consultez la présentation d’Qt Test pour savoir comment écrire des tests unitaires.

Classes

classe QTouchEventSequence

La classe QTouchEventSequence permet de simuler une séquence d'événements tactiles. En savoir plus...

classe QTouchEventWidgetSequence

La classe QTouchEventWidgetSequence permet de simuler une séquence d'événements tactiles pour un widget. En savoir plus...

classe ThrowOnFailDisabler

classe ThrowOnFailEnabler

classe ThrowOnSkipDisabler

classe ThrowOnSkipEnabler

Documentation sur les types

enum QTest::KeyAction

Cette énumération décrit les actions possibles pour la gestion des clés.

ConstanteValeurDescription
QTest::Press0La touche est enfoncée.
QTest::Release1La touche est relâchée.
QTest::Click2On clique sur la touche (on l'appuie puis on la relâche).
QTest::Shortcut3Un raccourci est activé. Cette valeur a été ajoutée dans Qt 5.6.

enum QTest::MouseAction

Cette énumération décrit les actions possibles pour la gestion de la souris.

ConstanteValeurDescription
QTest::MousePress0Un bouton de la souris est enfoncé.
QTest::MouseRelease1Un bouton de souris est relâché.
QTest::MouseClick2On clique sur un bouton de la souris (on l'enfonce puis on le relâche).
QTest::MouseDClick3On double-clique sur un bouton de la souris (on appuie et relâche deux fois).
QTest::MouseMove4Le pointeur de la souris s'est déplacé.

enum QTest::QBenchmarkMetric

Cette énumération répertorie tous les éléments pouvant faire l'objet d'un test de performance.

ConstanteValeurDescription
QTest::FramesPerSecond0Images par seconde
QTest::BitsPerSecond1Bits par seconde
QTest::BytesPerSecond2Octets par seconde
QTest::WalltimeMilliseconds3Temps d'horloge en millisecondes
QTest::WalltimeNanoseconds7Temps d'horloge en nanosecondes
QTest::BytesAllocated8Utilisation de la mémoire en octets
QTest::Events6Nombre d'événements
QTest::CPUTicks4Temps CPU
QTest::CPUMigrations9Migrations de processus entre processeurs
QTest::CPUCycles10Cycles CPU
QTest::RefCPUCycles30Cycles CPU de référence
QTest::BusCycles11Cycles de bus
QTest::StalledCycles12Cycles bloqués
QTest::InstructionReads5Lectures d'instructions
QTest::Instructions13Instructions exécutées
QTest::BranchInstructions14Instructions de type branchement
QTest::BranchMisses15Instructions de branchement dont la prédiction était erronée
QTest::CacheReferences16Accès au cache de tout type
QTest::CacheMisses20Échecs de cache de tout type
QTest::CacheReads17Lectures / chargements en cache
QTest::CacheReadMisses21Échecs de lecture / chargement du cache
QTest::CacheWrites18Écritures / stockages en cache
QTest::CacheWriteMisses22Échecs d'écriture / de stockage dans le cache
QTest::CachePrefetches19Préchargements du cache
QTest::CachePrefetchMisses23Échecs de prélecture du cache
QTest::ContextSwitches24Changements de contexte
QTest::PageFaults25Erreurs de page de tout type
QTest::MinorPageFaults26Erreurs de page mineures
QTest::MajorPageFaults27Erreurs de page majeures
QTest::AlignmentFaults28Erreurs dues à un désalignement
QTest::EmulationFaults29Erreurs nécessitant une émulation logicielle

Notez que les métriques WalltimeNanoseconds et BytesAllocated ne sont disponibles que via la fonction setBenchmarkResult(), et que les résultats de ces métriques ne peuvent pas être fournis automatiquement par le framework QTest.

Voir également QTest::benchmarkMetricName() et QTest::benchmarkMetricUnit().

enum QTest::TestFailMode

Cette énumération décrit les modes de gestion d'une vérification, par exemple via les macros ` QVERIFY()` ou ` QCOMPARE()`, dont on sait qu'elle échouera. Le mode s'applique que la vérification échoue ou réussisse.

ConstanteValeurDescription
QTest::Abort1Interrompt l'exécution du test. Utilisez ce mode lorsqu'il n'est pas pertinent de poursuivre l'exécution du test après la vérification problématique.
QTest::Continue2Poursuit l’exécution du test après la vérification problématique.

Voir aussi QEXPECT_FAIL().

Documentation sur les variables

[since 6.11] std::atomic<std::chrono::milliseconds> QTest::defaultTryTimeout

Cette variable globale stocke le délai d'expiration par défaut utilisé par les fonctions ` QTRY_* ` et ` qWait`.

L'utilisation la plus courante de cette variable consiste à modifier le délai d'expiration pour l'ensemble d'un 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);

Cependant, vous pouvez également la définir pour une portée spécifique, à l'aide de ` QAtomicScopedValueRollback` :

    const auto timeoutRollback = QAtomicScopedValueRollback(
        QTest::defaultTryTimeout, 1s, std::memory_order_relaxed);

Pour accéder à sa valeur, appelez ` load()` :

    // Since the atomic itself is all the data, all reads and stores can be relaxed.
    QCOMPARE(QTest::defaultTryTimeout.load(std::memory_order_relaxed), 1s);

Cette variable a été introduite dans Qt 6.11.

Documentation de la fonction

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

Ajoute une colonne de type « T » aux données de test actuelles. « name » est le nom de la colonne. « dummy » est une solution de contournement destinée aux compilateurs présentant des bogues et peut être ignorée.

Pour remplir la colonne avec des valeurs, on peut utiliser ` newRow()`. Utilisez ` QFETCH()` pour récupérer les données lors du test proprement dit.

Exemple :

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

Remarque : cette fonction ne peut être appelée que dans le cadre de la fonction de données d’un test, elle-même invoquée par le framework de test.

Voir « Tests pilotés par les données » pour un exemple plus complet.

Voir également QTest::newRow(), QFETCH() et QMetaType.

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

Ajoute une nouvelle ligne aux données de test actuelles.

Les arguments de la fonction sont transmis à std::snprintf() pour être formatés conformément à format. Consultez la documentation de std::snprintf() pour connaître les mises en garde et les limitations.

La sortie du test identifiera l'exécution du test avec ces données de test en utilisant le nom résultant de ce formatage.

Renvoie une référence QTestData pouvant être utilisée pour lire des données en continu, à raison d’une valeur par colonne du tableau.

Exemple :

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

Remarque : cette fonction ne peut être appelée que dans le cadre de la fonction de données d’un test, elle-même invoquée par le framework de test.

Consultez la section « Tests pilotés par les données » pour un exemple plus complet.

Voir également newRow(), addColumn() et QFETCH().

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

Renvoie la valeur d'énumération « metric » sous forme de chaîne de caractères.

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

Renvoie les unités de mesure associées à l'metric spécifiée.

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

Crée un périphérique tactile fictif de type ` devType ` doté des capacités ` caps ` pour la simulation d'événements tactiles.

Le périphérique tactile sera enregistré auprès de l'interface du système de fenêtrage Qt. En règle générale, vous devez utiliser createTouchDevice() pour initialiser une variable membre de type QPointingDevice dans votre classe de cas de test, utiliser la même instance pour tous les tests et la supprimer lorsqu'elle n'est plus nécessaire.

Voir également QTest::QTouchEventSequence et touchEvent().

const char *QTest::currentAppName()

Renvoie le nom du fichier binaire en cours d'exécution.

const char *QTest::currentDataTag()

Renvoie le nom des données de test actuelles. Si aucune donnée de test n'est attribuée au test, la fonction renvoie « nullptr ».

[since 6.11] const char *QTest::currentGlobalDataTag()

Renvoie le nom des données de test globales actuelles. Si aucune donnée de test globale n'est attribuée au test, la fonction renvoie « nullptr ».

Cette fonction a été introduite dans Qt 6.11.

bool QTest::currentTestFailed()

Renvoie « true » si la fonction de test actuelle a échoué, sinon « false ».

Voir aussi QTest::currentTestResolved().

const char *QTest::currentTestFunction()

Renvoie le nom de la fonction de test en cours d'exécution.

Exemple :

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

[since 6.5] bool QTest::currentTestResolved()

Renvoie « true » si la fonction de test en cours a échoué ou a été ignorée.

Cela s'applique si le test a échoué ou a déclenché un saut. Lorsque cette valeur est vraie, la fonction de test doit s'arrêter prématurément. En particulier, les macros QTRY_* et la boucle d'événements de test terminent leurs boucles prématurément si elles sont exécutées pendant la fonction de test (mais pas pendant son cleanup()). Après qu'un test a appelé une fonction d'aide utilisant les macros de ce module, il peut utiliser cette fonction pour déterminer s'il doit se terminer prématurément.

Cette fonction a été introduite dans Qt 6.5.

Voir également QTest::currentTestFailed().

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

Ajoute un échec de test au journal des tests pour chaque avertissement correspondant à messagePattern.

La fonction de test poursuivra son exécution lorsqu’un échec est ajouté. Pour interrompre le test à la place, vous pouvez vérifier currentTestFailed() et quitter prématurément si la valeur est true.

Pour chaque avertissement, le premier motif correspondant provoquera un échec, et les motifs restants seront ignorés.

Tous les modèles sont effacés à la fin de chaque fonction de test.

void FileTest::loadFiles()
{
    QTest::failOnWarning(QRegularExpression("^Échec du chargement"));

    // Chacun de ces éléments entraînera l'échec du test :
    qWarning() << "Failed to load image";
    qWarning() << "Failed to load video";
}

Pour faire échouer tous les tests qui déclenchent un avertissement donné, transmettez une expression régulière appropriée à cette fonction dans init():

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

Dans le cas courant où l’on souhaite faire échouer le test pour n’importe quel avertissement, ne passez aucun paramètre :

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

Remarque : la fonction` ignoreMessage()` a priorité sur cette fonction ; par conséquent, tout avertissement correspondant à un motif spécifié à la fois dans ` ignoreMessage() ` et dans ` failOnWarning() ` sera ignoré.

Cette fonction a été introduite dans Qt 6.3.

Voir également QTEST_FATAL_FAIL.

[since 6.8] void QTest::failOnWarning()

Ajoute un échec de test au journal des tests si un avertissement est généré.

Cette fonction surcharge la méthode ` QTest::failOnWarning()`.

Cette fonction a été introduite dans Qt 6.8.

Voir également failOnWarning(const char *).

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

Ajoute un échec de test au journal des tests si la méthode ` message ` est appelée.

Cette fonction surcharge la méthode ` QTest::failOnWarning()`.

Cette fonction a été introduite dans Qt 6.3.

Voir également failOnWarning().

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

Ignore les messages générés par les fonctions qDebug(), qInfo() ou qWarning(). Si l'message, avec l'type correspondante, est générée, elle sera supprimée du journal de test. Si le test est terminé et que l'message n'a pas été générée, un échec de test est ajouté au journal de test.

Remarque : l'appel de cette fonction ne permet d'ignorer qu'un seul message. Si le message que vous souhaitez ignorer est affiché deux fois, vous devez également appeler ignoreMessage() deux fois.

Exemple :

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

L'exemple ci-dessus vérifie que la fonction ` QDir::mkdir()` affiche l'avertissement approprié lorsqu'elle est appelée avec un nom de fichier non valide.

Remarque : message sera interprété en UTF-8.

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

Ignore les messages générés par les fonctions ` qDebug()`, ` qInfo()` ou ` qWarning()`. Si le message correspondant à ` messagePattern ` et dont le ` type ` est associé est affiché, il sera supprimé du journal de test. Si le test est terminé et que le message n'a pas été affiché, un échec de test est ajouté à la fin du journal de test.

Remarque : l'appel de cette fonction ne permet d'ignorer qu'un seul message. Si le message que vous souhaitez ignorer est affiché deux fois, vous devez également appeler ignoreMessage() deux fois.

Il s'agit d'une fonction surchargée.

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

Simule un clic sur key avec, en option, une valeur de modifier sur widget. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'enclencher la touche.

Exemples :

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

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

Le premier exemple ci-dessus simule un clic sur la touche escape sur myWidget sans aucun modificateur de clavier et sans délai. Le deuxième exemple simule un clic sur shift-escape sur myWidget après un délai de 200 ms dans le test.

Voir également QTest::keyClicks().

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

Simule un clic sur key avec, en option, une valeur modifier sur widget. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'enclencher la touche.

Exemple :

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

L'exemple ci-dessus simule un clic sur a à l'adresse myWidget sans aucun modificateur de clavier et sans délai du test.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClicks().

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

Simule un clic sur key avec, en option, un délai de modifier sur window. Si delay est supérieur à 0, le test attendra delay millisecondes avant d’enclencher la touche.

Exemples :

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

Le premier exemple ci-dessus simule un clic sur la touche escape sur myWindow sans aucun modificateur de clavier et sans délai. Le deuxième exemple simule un clic sur shift-escape sur myWindow après un délai de 200 ms dans le test.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClicks().

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

Simule un clic sur key avec, en option, une modifier sur window. Si delay est supérieur à 0, le test attendra delay millisecondes avant de cliquer sur la touche.

Exemple :

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

L'exemple ci-dessus simule un clic sur a à l'adresse myWindow sans aucun modificateur de clavier et sans délai du test.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClicks().

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

Simule le clic sur une sequence de touches d'un widget. Il est également possible de spécifier un modifier de clavier ainsi qu'un delay (en millisecondes) du test avant chaque clic sur une touche.

Exemple :

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

L’exemple ci-dessus simule l’enchaînement de touches correspondant à « hello world » sur myWidget sans aucun modificateur de clavier et sans délai de test.

Voir également QTest::keyClick().

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

Envoie un événement de touche Qt à widget avec l'key indiquée et l'action associé. Il est possible de spécifier, de manière facultative, un modifier de clavier, ainsi qu'un delay (en millisecondes) du test avant l'envoi de l'événement.

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

Envoie un événement de touche Qt à widget avec l'ascii de touche indiquée et l'action associée. Il est possible de spécifier, de manière facultative, un modifier de clavier, ainsi qu'un delay (en millisecondes) du test avant l'envoi de l'événement.

Il s'agit d'une fonction surchargée.

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

Envoie un événement de touche Qt à window avec l'key fournie et l'action associée. Il est possible de spécifier, de manière facultative, une modifier du clavier, ainsi qu'une delay (en millisecondes) du test avant l'envoi de l'événement.

Il s'agit d'une fonction surchargée.

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

Envoie un événement de touche Qt à window avec l'ascii de touche indiquée et l'action associée. Il est possible de spécifier, de manière facultative, un modifier de clavier, ainsi qu'une delay (en millisecondes) du test avant l'envoi de l'événement.

Il s'agit d'une fonction surchargée.

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

Simule l'appui sur une touche key avec, en option, une modifier sur une widget. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devrez relâcher la touche à l'aide de la fonction keyRelease().

Voir également QTest::keyRelease() et QTest::keyClick().

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

Simule l'appui sur une touche key avec, en option, une modifier sur un widget. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devrez relâcher la touche à l’aide de la fonction keyRelease().

Il s'agit d'une fonction surchargée.

Voir également QTest::keyRelease() et QTest::keyClick().

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

Simule l'actionnement d'une touche key avec, en option, un modifier sur une window. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devrez relâcher la touche à l’aide de keyRelease().

Il s'agit d'une fonction surchargée.

Voir également QTest::keyRelease() et QTest::keyClick().

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

Simule l'appui sur une touche key avec, en option, un délai modifier sur une page window. Si delay est supérieur à 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devrez relâcher la touche à l’aide de la fonction keyRelease().

Il s'agit d'une fonction surchargée.

Voir également QTest::keyRelease() et QTest::keyClick().

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

Simule la libération d'un objet ` key ` avec un délai d'attente facultatif ` modifier ` sur un ` widget`. Si ` delay ` est supérieur à 0, le test attendra ` delay ` millisecondes avant de libérer la clé.

Voir également QTest::keyPress() et QTest::keyClick().

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

Simule la libération d'une clé « key » avec une durée d'attente facultative « modifier » sur une « widget ». Si « delay » est supérieur à 0, le test attendra « delay » millisecondes avant de libérer la clé.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClick().

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

Simule la libération d'une clé « key » avec un délai de libération facultatif « modifier » sur une clé « window ». Si « delay » est supérieur à 0, le test attendra « delay » millisecondes avant de libérer la clé.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyPress() et QTest::keyClick().

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

Simule la libération d'une clé « key » avec un délai d'attente facultatif « modifier » sur un « window ». Si « delay » est supérieur à 0, le test attendra « delay » millisecondes avant de libérer la clé.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClick().

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

Simule la saisie de l'adresse keySequence dans le champ widget.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClick() et QTest::keyClicks().

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

Simule la saisie de « keySequence » dans window.

Il s'agit d'une fonction surchargée.

Voir également QTest::keyClick() et QTest::keyClicks().

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

Simule un clic de souris button avec, en option, un modifier sur un widget. La position du clic est définie par pos; la position par défaut est le centre du widget. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant d'enclencher et de relâcher le bouton.

Voir également QTest::mousePress() et QTest::mouseRelease().

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

Simule un clic de souris button avec, en option, le modificateur stateKey sur une window. La position du clic est définie par pos; la position par défaut est le centre de la fenêtre. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant d’enfoncer et avant de relâcher le bouton.

Il s'agit d'une fonction surchargée.

Voir également QTest::mousePress() et QTest::mouseRelease().

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

Simule un double-clic de souris button avec, en option, un modifier sur une widget. La position du clic est définie par pos; la position par défaut est le centre du widget. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant chaque pression et relâchement.

Voir également QTest::mouseClick().

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

Simule un double-clic de souris button avec, en option, le modificateur stateKey sur une window. La position du clic est définie par pos; la position par défaut est le centre de la fenêtre. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant chaque pression et relâchement.

Il s'agit d'une fonction surchargée.

Voir également QTest::mouseClick().

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

Déplace le pointeur de la souris vers un « widget ». Si « pos » n'est pas spécifié, le pointeur de la souris se déplace vers le centre du widget. Si un « delay » (en millisecondes) est indiqué, le test attendra avant de déplacer le pointeur de la souris.

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

Déplace le pointeur de la souris vers une coordonnée window. Si pos n'est pas spécifiée, le pointeur de la souris se déplace vers le centre de la fenêtre. Si une valeur delay (en millisecondes) est fournie, la fonction attendra avant de déplacer le pointeur de la souris.

Il s'agit d'une fonction surchargée.

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

Simule un clic de souris button avec, en option, un modifier sur un widget. La position est définie par pos; la position par défaut est le centre du widget. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant d'effectuer le clic.

Voir également QTest::mouseRelease() et QTest::mouseClick().

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

Simule l'button d'un clic de souris avec, éventuellement, le modificateur « stateKey » sur une fenêtre window. La position est définie par pos; la position par défaut est le centre de la fenêtre. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant d'effectuer le clic.

Il s'agit d'une fonction surchargée.

Voir également QTest::mouseRelease() et QTest::mouseClick().

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

Simule le relâchement d'button de souris avec un délai de relâchement ( modifier ) facultatif sur un widget. La position du relâchement est définie par pos; la position par défaut est le centre du widget. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant de relâcher le bouton ; sinon, il attendra un délai par défaut (1 ms), qui peut être redéfini via des arguments de ligne de commande.

Remarque : si vous souhaitez tester un double-clic en envoyant les événements individuellement, spécifiez un court délai, supérieur à la valeur par défaut, pour les deux événements de relâchement de la souris. La somme des délais pour les événements « pression », « relâchement », « pression » et « relâchement » doit être inférieure à QStyleHints::mouseDoubleClickInterval(). Toutefois, si vous n’avez pas besoin de vérifier l’état entre les événements, il est préférable d’utiliser QTest::mouseDClick().

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);

Voir également QTest::mousePress() et QTest::mouseClick().

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

Simule le relâchement d'un bouton de souris button avec, éventuellement, le modificateur stateKey sur une fenêtre window. La position du relâchement est définie par pos; la position par défaut est le centre de la fenêtre. Si delay est spécifié, le test attendra le nombre de millisecondes indiqué avant de relâcher le bouton ; sinon, il attendra un délai par défaut (1 ms), qui peut être redéfini via des arguments de ligne de commande.

Remarque : si vous souhaitez tester un double-clic en envoyant les événements individuellement, spécifiez un court délai, supérieur à la valeur par défaut, pour les deux événements de relâchement de la souris. La somme des délais pour les événements « pression », « relâchement », « pression » et « relâchement » doit être inférieure à QStyleHints::mouseDoubleClickInterval(). Mais si vous n’avez pas besoin de vérifier l’état entre les événements, il est préférable d’utiliser QTest::mouseDClick().

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);

Il s'agit d'une fonction surchargée.

Voir également QTest::mousePress() et QTest::mouseClick().

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

Ajoute une nouvelle ligne aux données de test actuelles.

Le résultat du test identifiera l'exécution de test associée à ces données de test sous le nom « dataTag ».

Renvoie une référence QTestData pouvant être utilisée pour charger des données en continu, à raison d’une valeur par colonne du tableau.

Exemple :

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

Remarque : cette fonction ne peut être appelée que dans le cadre d'une fonction de données de test invoquée par le framework de test.

Voir « Tests pilotés par les données » pour un exemple plus complet.

Voir également addRow(), addColumn() et QFETCH().

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

Exécute les tests déclarés dans ` testObject`. De plus, les slots privés ` initTestCase()`, ` cleanupTestCase()`, ` init() ` et ` cleanup() ` sont exécutés s'ils existent. Voir « Création d'un test » pour plus de détails.

En option, les arguments de ligne de commande argc et argv peuvent être fournis. Pour obtenir la liste des arguments reconnus, consultez la section « Arguments de ligne de commande deQt Test ».

L'exemple suivant exécutera tous les tests contenus dans MyTestObject:

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

Cette fonction renvoie 0 si aucun test n’a échoué, ou une valeur différente de 0 si un ou plusieurs tests ont échoué ou en cas d’exceptions non gérées. (Les tests ignorés n’influencent pas la valeur de retour.)

Pour les applications de test autonomes, la macro de commodité QTEST_MAIN() peut être utilisée pour déclarer une fonction main() qui analyse les arguments de ligne de commande et exécute les tests, évitant ainsi d’avoir à appeler explicitement cette fonction.

La valeur de retour de cette fonction correspond également au code de sortie de l’application de test lorsque la macro QTEST_MAIN() est utilisée.

Pour les applications de test autonomes, cette fonction ne doit pas être appelée plus d’une fois, car les options de ligne de commande permettant d’enregistrer la sortie des tests dans des fichiers et d’exécuter des fonctions de test individuelles ne fonctionneront pas correctement.

Remarque : cette fonction n’est pas réentrante ; un seul test peut s’exécuter à la fois. Un test exécuté via `qExec()` ne peut pas lancer un autre test via `qExec()`, et les threads ne sont pas autorisés à appeler `qExec()` simultanément.

Si vous avez créé les arguments par programmation, plutôt que de les récupérer à partir des arguments de ` main()`, il peut être intéressant d’utiliser `QTest::qExec(QObject *, const QStringList &)`, car cette fonction est compatible Unicode.

Voir également QTEST_MAIN(), QTEST_GUILESS_MAIN() et QTEST_APPLESS_MAIN().

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

Se comporte exactement comme qExec(QObject *, int, char**), mais prend une liste de type QStringList de arguments au lieu d'une liste de type char**.

Il s'agit d'une fonction surchargée.

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

Extrait un répertoire des ressources vers le disque. Le contenu est extrait de manière récursive vers un dossier temporaire. Le contenu extrait est supprimé automatiquement dès que la dernière référence à la valeur de retour sort de la portée.

dirName est le nom du répertoire à extraire des ressources.

Renvoie le répertoire temporaire dans lequel les données ont été extraites ou la valeur null en cas d'erreur.

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

Enregistre le test name, avec la fonction d'entrée entryFunction, dans un registre central des cas de test pour le binaire actuel.

L'name apparaîtra dans la liste lors de l'exécution du binaire de test par lots sans paramètre. L'exécution du binaire de test avec l'argument argv[1] défini sur name entraînera l'appel de la fonction entryFunction.

Cette fonction a été introduite dans Qt 6.5.

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

Mise en attente pendant msecs, ce qui bloque l'exécution du test.

Cette méthode n'effectuera aucun traitement d'événement et rendra votre test inactif. La communication réseau risque d'expirer pendant la mise en veille. Utilisez QTest::qWait() pour effectuer une mise en veille non bloquante.

msecs La valeur doit être supérieure à 0 ms.

Remarque : à partir de Qt 6.7, cette fonction est implémentée à l'aide de ` std::this_thread::sleep_for`, de sorte que la précision du temps écoulé dépend de l'implémentation de la bibliothèque standard. Avant Qt 6.7, cette fonction appelait soit ` nanosleep() ` sous Unix, soit ` Sleep() ` sous Windows ; la précision du temps écoulé dans cette fonction dépendait donc du système d'exploitation.

Exemple :

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

Cette fonction a été introduite dans Qt 6.7.

Voir également QTest::qWait().

void QTest::qSleep(int ms)

Mise en attente pendant ms e de milliseconde, ce qui bloque l'exécution du test.

Équivaut à appeler :

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

Il s'agit d'une fonction surchargée.

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

Attend la fin de msecs. Pendant l'attente, les événements seront traités et votre test restera réactif aux événements de l'interface utilisateur ou aux communications réseau.

Exemple :

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

Le code ci-dessus attendra que le serveur réseau réponde pendant une durée maximale d’environ 12,5 secondes.

Les macros QTRY_* constituent généralement un meilleur choix que qWait(). En effet, qWait() met toujours le test en pause pendant toute la durée du délai d’expiration, ce qui peut le laisser inactif et ralentir son exécution.

Les macros ` QTRY_* ` vérifient la condition jusqu’à ce qu’elle soit remplie ou que le délai d’attente expire. Votre test se poursuit donc dès que possible et reste plus fiable. Si la condition échoue toujours, les macros doublent le délai d’attente une fois et signalent la nouvelle valeur afin que vous puissiez l’ajuster.

Par exemple, réécrivez le code ci-dessus comme suit :

QTRY_VERIFY_WITH_TIMEOUT(!myNetworkServerNotResponding(), 12.5s);

Cette fonction a été introduite dans Qt 6.7.

Voir également QTest::qSleep(), QSignalSpy::wait() et QTRY_VERIFY_WITH_TIMEOUT().

void QTest::qWait(int msecs)

Attend la valeur « msecs ». Équivaut à l'appel suivant :

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

Il s'agit d'une fonction surchargée.

[since 6.7] template <typename Functor> bool QTest::qWaitFor(Functor predicate, QDeadlineTimer deadline = QDeadlineTimer( defaultTryTimeout.load(std::memory_order_relaxed)))

Attend que la durée de validité de ` deadline ` soit écoulée, ou que ` predicate ` renvoie `true`, selon la première éventualité.

Renvoie true si predicate a renvoyé la valeur « true » à un moment quelconque, sinon renvoie false.

Exemple :

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

Le code ci-dessus attendra que l’objet soit prêt, pendant trois secondes au maximum.

Cette fonction a été introduite dans Qt 6.7.

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

Attend pendant timeout millisecondes ou jusqu’à ce que la fonction predicate renvoie la valeur « true ».

Cela revient à appeler :

qWaitFor(predicate, QDeadlineTimer(timeout));

Il s'agit d'une fonction surchargée.

[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget, QDeadlineTimer timeout)

Renvoie ` true ` si ` widget ` est actif dans un délai de ` timeout ` millisecondes. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWidget::show()` et qui s'assurent que le widget est bien actif (c'est-à-dire visible et sélectionné) avant de poursuivre.

Remarque : la méthode expirera et renverra false si une autre fenêtre empêche widget de devenir active.

Remarque : le focusétant une propriété exclusive, widget peut à tout moment perdre son focus au profit d’une autre fenêtre, même après que la méthode a renvoyé true.

Cette fonction a été introduite dans Qt 6.10.

Voir également qWaitForWindowExposed() et QWidget::isActiveWindow().

[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)

Renvoie ` true` si ` window ` est active dans ` timeout`. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWindow::show()` et qui s'assurent que la fenêtre est bien active (c'est-à-dire visible et active) avant de poursuivre.

Remarque : la méthode expirera et renverra false si une autre fenêtre empêche window de devenir active.

Remarque : le focusétant une propriété exclusive, ` window ` peut à tout moment perdre son focus au profit d’une autre fenêtre, même après que la méthode a renvoyé ` true`.

Cette fonction a été introduite dans Qt 6.10.

Voir également qWaitForWindowExposed(), qWaitForWindowFocused() et QWindow::isActive().

[since 6.10] bool QTest::qWaitForWindowActive(QWidget *widget)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

[since 6.10] bool QTest::qWaitForWindowActive(QWindow *window)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

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

L'timeout e est exprimée en millisecondes.

Il s'agit d'une fonction surchargée.

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

L'timeout e est exprimée en millisecondes.

Il s'agit d'une fonction surchargée.

[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget, QDeadlineTimer timeout)

Renvoie ` true ` si ` widget ` est visible dans un délai de ` timeout ` millisecondes. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWidget::show()` et qui s’assurent que le widget est bien visible avant de poursuivre.

Remarque : une fenêtre mappée à l’écran peut ne pas être considérée comme exposée si sa zone client n’est pas visible, par exemple parce qu’elle est entièrement recouverte par d’autres fenêtres. Dans ce cas, la méthode expire et renvoie false.

Cette fonction a été introduite dans Qt 6.10.

Voir également qWaitForWindowActive(), QWidget::isVisible() et QWindow::isExposed().

[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)

Renvoie ` true` si ` window ` est accessible au sein de ` timeout`. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWindow::show()` et qui s’assurent que la fenêtre est bien visible avant de poursuivre.

Remarque : une fenêtre mappée à l’écran peut ne pas être considérée comme exposée si sa zone client n’est pas visible, par exemple parce qu’elle est entièrement recouverte par d’autres fenêtres. Dans ce cas, la méthode expire et renvoie false.

Cette fonction a été introduite dans Qt 6.10.

Voir également qWaitForWindowActive() et QWindow::isExposed().

[since 6.10] bool QTest::qWaitForWindowExposed(QWidget *widget)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

[since 6.10] bool QTest::qWaitForWindowExposed(QWindow *window)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

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

L'timeout e est exprimée en millisecondes.

Il s'agit d'une fonction surchargée.

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

L'timeout e est exprimée en millisecondes.

Il s'agit d'une fonction surchargée.

[since 6.7] bool QTest::qWaitForWindowFocused(QWidget *widget, QDeadlineTimer timeout)

Renvoie ` true` si ` widget ` est la fenêtre active au sein de ` timeout`. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWidget::show()` et qui s'assurent que le widget a le focus (pour recevoir des événements clavier, par exemple) avant de poursuivre.

Remarque : la méthode expirera et renverra false si une autre fenêtre empêche widget d'obtenir le focus.

Remarque : le focusétant une propriété exclusive, ` widget ` peut à tout moment perdre le focus au profit d’une autre fenêtre, même après que la méthode a renvoyé ` true`.

Cette fonction a été introduite dans Qt 6.7.

Voir également qWaitForWindowExposed(), qWaitForWindowActive() et QGuiApplication::focusWindow().

[since 6.7] bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)

Renvoie ` true` si ` window ` est la fenêtre active au sein de ` timeout`. Sinon, renvoie ` false`.

Cette méthode est utile dans les tests qui appellent ` QWindow::show()` et qui s'assurent que la fenêtre a le focus (pour recevoir des événements clavier, par exemple) avant de poursuivre.

Remarque : la méthode expirera et renverra false si une autre fenêtre empêche window d’obtenir le focus.

Remarque : le focusétant une propriété exclusive, ` window ` peut perdre son focus au profit d'une autre fenêtre à tout moment, même après que la méthode a renvoyé ` true`.

Cette fonction a été introduite dans Qt 6.7.

Voir également qWaitForWindowExposed(), qWaitForWindowActive() et QGuiApplication::focusWindow().

[since 6.10] bool QTest::qWaitForWindowFocused(QWidget *widget)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

[since 6.10] bool QTest::qWaitForWindowFocused(QWindow *window)

Cette fonction utilise le délai d'expiration par défaut de 5 secondes.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.10.

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

Définit le résultat de référence de cette fonction de test sur result.

Utilisez cette fonction si vous souhaitez générer des rapports sur les résultats de benchmark sans utiliser la macro QBENCHMARK. Utilisez metric pour spécifier comment Qt Test doit interpréter les résultats.

Le contexte du résultat sera le nom de la fonction de test et toute balise de données provenant de la fonction _data. Cette fonction ne peut être appelée qu'une seule fois dans chaque fonction de test ; les appels suivants remplaceront les résultats précédemment rapportés.

Notez que l’argument de ligne de commande -iterations n’a aucun effet sur les fonctions de test ne comportant pas la macro QBENCHMARK.

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

Active (enable = true) ou désactive (enable = false) le lancement d’une exception en cas d’échec des fonctions QCOMPARE() /QVERIFY() (au lieu de simplement revenir au contexte de la fonction immédiatement supérieure).

Cette fonctionnalité utilise un compteur de références : si vous appelez cette fonction N fois avec true, vous devez l'appeler N fois avec false pour revenir à votre point de départ.

Cet appel n’a aucun effet lorsque la macro C++ QTEST_THROW_ON_FAIL est définie.

Remarque : vous devez compiler vos tests avec les exceptions activées pour utiliser cette fonctionnalité.

Cette fonction a été introduite dans Qt 6.8.

Voir également setThrowOnSkip(), ThrowOnFailEnabler, ThrowOnFailDisabler et QTEST_THROW_ON_FAIL.

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

Active (enable = true) ou désactive (enable = false) le lancement d’une exception lors de l’appel à ` QSKIP()` (au lieu de simplement retourner au contexte de la fonction immédiatement supérieure).

Cette fonctionnalité utilise un compteur de références : si vous appelez cette fonction N fois avec ` true`, vous devez l'appeler N fois avec ` false ` pour revenir à votre point de départ.

Cet appel n’a aucun effet lorsque la macro C++ QTEST_THROW_ON_SKIP est définie.

Remarque : vous devez compiler vos tests avec les exceptions activées pour utiliser cette fonctionnalité.

Cette fonction a été introduite dans Qt 6.8.

Voir également setThrowOnFail(), ThrowOnSkipEnabler, ThrowOnSkipDisabler et QTEST_THROW_ON_SKIP.

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

Renvoie un pointeur vers une chaîne de caractères correspondant à la chaîne ba, représentée sous la forme d’une séquence de caractères hexadécimaux séparés par des espaces. Si la chaîne d’entrée est jugée trop longue, elle est tronquée. Une troncature est indiquée dans la chaîne renvoyée par des points de suspension à la fin. L’appelant est propriétaire du pointeur renvoyé et doit s’assurer qu’il soit ultérieurement transmis à l’opérateur delete[].

length est la longueur de la chaîne ba.

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

Renvoie une représentation textuelle de value. Cette fonction est utilisée par QCOMPARE() pour afficher des informations détaillées en cas d'échec d'un test.

Vous pouvez ajouter des spécialisations ou des surcharges de cette fonction à votre test pour activer l'affichage détaillé.

Remarque : à partir de Qt 5.5, il est préférable de fournir une fonction toString() dans l'espace de noms du type plutôt que de spécialiser ce modèle. Si votre code doit continuer à fonctionner avec la bibliothèque QTestLib de Qt 5.4 ou d'une version antérieure, vous devez continuer à utiliser la spécialisation.

Remarque : l'appelant de `toString()` doit supprimer les données renvoyées à l'aide de ` delete[]`. Votre implémentation doit renvoyer une chaîne créée avec ` new[] ` ou ` qstrdup()`. Le moyen le plus simple d'y parvenir est de créer un ` QByteArray ` ou un ` QString ` et d'appeler `QTest::toString()` dessus (voir le deuxième exemple ci-dessous).

Exemple de spécialisation (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());
    }
}

L'exemple ci-dessus définit une spécialisation de toString() pour une classe appelée MyPoint. Chaque fois qu'une comparaison entre deux instances de MyPoint échoue, QCOMPARE() appellera cette fonction pour afficher le contenu de MyPoint dans le journal de test.

Même exemple, mais avec la surcharge (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()) + ')');
}

Voir également QCOMPARE().

char *toString(QSizePolicy sp)

Renvoie une représentation textuelle de la politique de taille sp.

Il s'agit d'une fonction surchargée.

char *toString(QSizePolicy::ControlType ct)

Renvoie une représentation textuelle du type de contrôle ct.

Il s'agit d'une fonction surchargée.

char *toString(QSizePolicy::ControlTypes cts)

Renvoie une représentation textuelle des types de contrôle cts.

Il s'agit d'une fonction surchargée.

char *toString(QSizePolicy::Policy p)

Renvoie une représentation textuelle de la politique p.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle du tableau d'octets ba.

Il s'agit d'une fonction surchargée.

Voir également QTest::toHexRepresentation().

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

Renvoie une représentation textuelle de l'erreur CBOR indiquée c.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'character on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'date on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de la date et de l'heure spécifiées par ` dateTime`.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de la séquence de clés « ks ».

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.5.

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

Renvoie une représentation textuelle de l'string on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'point on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'point on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'rectangle on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'rectangle on fournie.

Il s’agit d’une fonction surchargée.

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

Renvoie une représentation textuelle de l'size on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'size on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'string.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'string on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'time on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'url on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'uuid on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'variant on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle du vecteur 2D v.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle du vecteur 3D v.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle du vecteur 4D v.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'pair.

Il s'agit d'une fonction surchargée.

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

Renvoie une représentation textuelle de l'tuple on fournie.

Il s'agit d'une fonction surchargée.

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

Renvoie une chaîne contenant « nullptr ».

Il s'agit d'une fonction surchargée.

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

Crée et renvoie un objet ` QTouchEventSequence ` pour l'device, afin de simuler des événements pour ` widget`.

Lors de l’ajout d’événements tactiles à la séquence, widget sera également utilisé pour convertir la position fournie en coordonnées d’écran, à moins qu’un autre widget ne soit fourni dans les appels respectifs à press(), move(), etc.

Les événements tactiles sont transmis au système d’événements lorsque le destructeur de l’ QTouchEventSequence est appelé (c’est-à-dire lorsque l’objet renvoyé sort de sa portée), sauf si autoCommit est défini sur false. Lorsque autoCommit est défini sur false, la fonction commit() doit être appelée manuellement.

createTouchDeviceLa fonction () peut être appelée pour créer un périphérique tactile de test à utiliser avec cette fonction.

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

Crée et renvoie un objet ` QTouchEventSequence ` pour l'device, afin de simuler des événements pour ` window`.

Lors de l’ajout d’événements tactiles à la séquence, window sera également utilisé pour convertir la position fournie en coordonnées d’écran, à moins qu’une autre fenêtre ne soit fournie dans les appels respectifs à press(), move(), etc.

Les événements tactiles sont transmis au système d’événements lorsque le destructeur de l’ QTouchEventSequence est appelé (c’est-à-dire lorsque l’objet renvoyé sort de sa portée), sauf si autoCommit est défini sur false. Lorsque autoCommit est à false, commit() doit être appelé manuellement.

createTouchDeviceLa fonction () peut être appelée pour créer un périphérique tactile de test à utiliser avec cette fonction.

[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)

Simule un événement de molette dans ` window ` à la position ` pos ` selon les coordonnées locales de la fenêtre. ` angleDelta ` contient l'angle de rotation de la molette. Une valeur positive correspond à une rotation vers l'avant, tandis qu'une valeur négative correspond à une rotation vers l'arrière. ` pixelDelta ` contient la distance de défilement en pixels à l'écran. Cette valeur peut être nulle. Les états du clavier au moment de l'événement sont spécifiés par ` stateKey`. La phase de défilement de l'événement est spécifiée par ` phase`.

Cette fonction a été introduite dans Qt 6.8.

Documentation sur les macros

QBENCHMARK

Cette macro sert à mesurer les performances d'un code dans le cadre d'un test. Le code à évaluer est contenu dans un bloc de code situé après cette macro.

Par exemple :

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);
    }
}

Voir également Création d'un test de performance et Écriture d'un test de performance.

QBENCHMARK_ONCE

La macro QBENCHMARK_ONCE sert à mesurer les performances d'un bloc de code en l'exécutant une seule fois.

Cette macro sert à mesurer les performances du code dans le cadre d'un test. Le code à évaluer est contenu dans un bloc de code situé après cette macro.

Contrairement à QBENCHMARK, le contenu du bloc de code n'est exécuté qu'une seule fois. Le temps écoulé sera indiqué comme « 0 » s'il est trop court pour être mesuré par le backend sélectionné.

Voir également Création d’un test de performance et Écriture d’un test de performance.

QCOMPARE(actual, expected)

La macro QCOMPARE() compare une valeur actual à une valeur expected à l'aide de l'opérateur d'égalité. Si actual et expected correspondent, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test retourne sans tenter de vérifications ultérieures.

Respectez toujours la sémantique des paramètres de QCOMPARE(). Le premier paramètre qui lui est transmis doit toujours être la valeur réelle produite par le code testé, tandis que le deuxième paramètre doit toujours être la valeur attendue. Lorsque les valeurs ne correspondent pas, QCOMPARE() les affiche avec les libellés « Actual » et « Expected ». Si l'ordre des paramètres est inversé, le débogage d'un test ayant échoué peut s'avérer déroutant et les tests s'attendant à zéro peuvent échouer en raison d'erreurs d'arrondi.

QCOMPARE() tente d’afficher le contenu des valeurs si la comparaison échoue, ce qui permet de comprendre, à partir du journal de test, pourquoi la comparaison a échoué.

Exemple :

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

Lors de la comparaison de types à virgule flottante (float, double et qfloat16), la fonction ` qFuzzyCompare()` est utilisée pour les valeurs finies. Si la fonction ` qFuzzyIsNull()` renvoie `true` pour les deux valeurs, celles-ci sont également considérées comme égales. Les valeurs infinies sont considérées comme égales si elles ont le même signe, et toute valeur réelle de type NaN correspond à toute valeur attendue de type NaN (même si NaN ≠ NaN, même lorsqu’elles sont identiques).

Lors de la comparaison QList, des tableaux et des listes d’initialisation du type de la valeur peuvent être passés en tant que valeur attendue :

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

Notez que l’utilisation de listes d’initialisation nécessite de définir une macro d’aide pour empêcher le préprocesseur d’interpréter les virgules comme des délimiteurs d’arguments de macro :

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

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger la méthode ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Exemple :

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

La valeur renvoyée par ` toString() ` doit être de type ` new char []`. Autrement dit, elle doit être libérée à l’aide de ` delete[] ` (plutôt que ` free() ` ou simplement ` delete`) une fois que le code appelant en a terminé avec elle.

Voir également QVERIFY(), QTRY_COMPARE(), QTest::toString(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

[since 6.9] QCOMPARE_3WAY(lhs, rhs, order)

La macro QCOMPARE_3WAY() applique l'opérateur de comparaison à trois voies <=> aux expressions d'entrée lhs et rhs, puis vérifie si le résultat est order. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test retourne sans effectuer les vérifications suivantes. La macro n'accepte que les types d'ordonnancement Qt:: et std:: comme argument de order, sinon elle déclenche une assertion.

Remarque : ` order ` peut être un type d'ordonnancement `Qt::` même si ` decltype(lhs <=> rhs) ` est un type `std::`. Le résultat de l'opération ` decltype(lhs <=> rhs) ` doit avoir la même force que ` order`. Sinon, l'application de la macro entraînera une erreur de compilation. Par exemple, si le résultat de ` decltype(lhs <=> rhs) ` est d'un type d'ordonnancement faible, l'argument ` order ` ne peut pas être d'un type d'ordonnancement partiel ou fort.

Remarque : la macro ne fonctionne que si le compilateur prend en charge l’opérateur <=>; dans le cas contraire, elle affirme de manière statique que la fonctionnalité requise n’est pas disponible. Avant d’utiliser une macro, vérifiez toujours si __cpp_lib_three_way_comparison est défini, et utilisez QSKIP si ce n’est pas le cas.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger QTest::toString() afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.9.

[since 6.4] QCOMPARE_EQ(computed, baseline)

La macro QCOMPARE_EQ() vérifie que computed est égal à baseline à l'aide de l'opérateur d'égalité. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test retourne sans effectuer les vérifications suivantes.

Son fonctionnement est globalement similaire à l’appel de la fonction QVERIFY(computed == baseline);, mais elle affiche, en cas d’échec, un message d’erreur formaté indiquant les expressions et les valeurs des arguments computed et baseline.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Remarque : contrairement à QCOMPARE(), cette macro ne propose pas de surcharges pour les types personnalisés et les pointeurs. Ainsi, le fait de passer par exemple deux valeurs de type const char * en paramètres entraînera une comparaison de pointeurs, tandis que QCOMPARE() effectue une comparaison de chaînes de caractères de style C.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

[since 6.4] QCOMPARE_GE(computed, baseline)

La macro QCOMPARE_GE() vérifie que computed est au moins égal à baseline à l'aide de l'opérateur « supérieur ou égal à ». Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test se termine sans effectuer les vérifications suivantes.

Son fonctionnement est globalement similaire à l’appel de la fonction ` QVERIFY(computed >= baseline); `, mais elle affiche, en cas d’échec, un message d’erreur formaté indiquant les expressions et les valeurs des arguments ` computed ` et ` baseline `.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE() et QCOMPARE_GT().

[since 6.4] QCOMPARE_GT(computed, baseline)

La macro QCOMPARE_GT() vérifie que computed est supérieur à baseline à l'aide de l'opérateur « supérieur à ». Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test se termine sans effectuer les vérifications suivantes.

Son fonctionnement est globalement similaire à l'appel de QVERIFY(computed > baseline);, mais elle affiche, en cas d'échec, un message d'erreur formaté indiquant les expressions et les valeurs des arguments computed et baseline.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE() et QCOMPARE_GE().

[since 6.4] QCOMPARE_LE(computed, baseline)

La macro QCOMPARE_LE() vérifie que computed est au plus égal à baseline à l'aide de l'opérateur « inférieur ou égal à ». Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test retourne sans effectuer les vérifications suivantes.

Son fonctionnement est globalement similaire à l’appel de ` QVERIFY(computed <= baseline); `, mais elle affiche, en cas d’échec, un message d’erreur formaté indiquant les expressions et les valeurs des arguments ` computed ` et ` baseline `.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_GT() et QCOMPARE_GE().

[since 6.4] QCOMPARE_LT(computed, baseline)

La macro QCOMPARE_LT() vérifie que computed est inférieur à baseline à l'aide de l'opérateur « inférieur à ». Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test se termine sans effectuer les vérifications suivantes.

Son fonctionnement est globalement similaire à l’appel de la fonction QVERIFY(computed < baseline);, mais elle affiche, en cas d’échec, un message d’erreur formaté indiquant les expressions et les valeurs des arguments computed et baseline.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

[since 6.4] QCOMPARE_NE(computed, baseline)

La macro QCOMPARE_NE() vérifie que computed n'est pas égal à baseline à l'aide de l'opérateur d'inégalité. Si cela est vrai, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et la fonction de test retourne sans tenter d'autres vérifications.

Son fonctionnement est globalement similaire à l'appel de la fonction QVERIFY(computed != baseline);, mais elle affiche, en cas d'échec, un message d'erreur formaté indiquant les expressions et les valeurs des arguments computed et baseline.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Pour vos propres classes, vous pouvez surcharger ` QTest::toString()` afin de formater les valeurs destinées à être affichées dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

QEXPECT_FAIL(dataIndex, comment, mode)

La macro QEXPECT_FAIL() marque l'appel suivant de QCOMPARE() ou QVERIFY() comme un échec attendu. Au lieu d'ajouter un échec au journal de test, un échec attendu sera signalé.

Si un appel à QVERIFY() ou QCOMPARE() est marqué comme un échec attendu, mais qu’il aboutit à un succès, un succès inattendu (XPASS) est consigné dans le journal de test et sera comptabilisé comme un échec de test.

Le paramètre dataIndex décrit pour quelle entrée des données de test l'échec est attendu. Passez une chaîne vide ("") si l'échec est attendu pour toutes les entrées ou s'il n'existe aucune donnée de test.

comment sera ajouté au journal de test pour l’échec attendu.

mode est une QTest::TestFailMode qui détermine si le test doit se poursuivre ou non. La mode est appliquée, que l'échec attendu du test se produise ou non.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Exemple 1 :

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

Dans l’exemple ci-dessus, un échec attendu sera consigné dans la sortie du test si la variable i n’est pas égale à 42. Si la variable i est égale à 42, un succès inattendu est consigné à la place. La fonction QEXPECT_FAIL() n’a aucune influence sur la deuxième instruction QCOMPARE() de l’exemple.

Exemple 2 :

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

La fonction de test ci-dessus ne poursuivra pas son exécution pour l’entrée de données de test data27 (quelle que soit la valeur de i).

Voir également QTest::TestFailMode, QVERIFY() et QCOMPARE().

QFAIL(message)

Cette macro permet de forcer l'échec d'un test. L'exécution du test s'arrête et l'message s relatives à l'échec sont ajoutées au journal des tests.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Exemple :

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

QFETCH(type, name)

La macro `fetch` crée sur la pile une variable locale nommée ` name ` de type ` type `. Les paramètres ` name ` et ` type ` doivent correspondre à une colonne du tableau de données du test. Cette condition fait l’objet d’une assertion et le test s’interrompt si l’assertion échoue.

Supposons qu’un test dispose des données suivantes :

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;
}

Les données de test comportent deux éléments : une chaîne de caractères QString nommée aString et un entier expected. Pour récupérer ces valeurs dans le test proprement dit :

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

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

aString et expected sont des variables de la pile initialisées avec les données de test actuelles.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test. La fonction de test doit disposer d’une fonction _data.

QFETCH_GLOBAL(type, name)

Cette macro récupère une variable nommée « name », de type « type », à partir d’une ligne de la table de données globale. Les paramètres « name » et « type » doivent correspondre à une colonne de la table de données globale. Cette condition est vérifiée et le test s’interrompt si la vérification échoue.

Supposons qu’un test dispose des données suivantes :

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;
}

Les données propres au test correspondent à un seul nombre par ligne. Dans ce cas, initTestCase_data() fournit également une locale par ligne. Par conséquent, ce test sera exécuté avec toutes les combinaisons possibles entre les paramètres régionaux de la table locale et les nombres de la table globale. Ainsi, avec quatre lignes dans la table globale et trois dans la table locale, la fonction de test est exécutée pour 12 cas de test distincts (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);
}

La locale est lue à partir de la table de données globale à l’aide de QFETCH_GLOBAL(), et le nombre est lu à partir de la table de données locale à l’aide de QFETCH().

Remarque : cette macro ne peut être utilisée que dans les méthodes de test d’une classe disposant d’une méthode initTestCase_data() ().

QFINDTESTDATA(filename)

Renvoie un objet ` QString ` correspondant au fichier de données de test référencé par ` filename`, ou un objet vide ` QString ` si le fichier de données de test est introuvable.

Cette macro permet au test de charger des données à partir d’un fichier externe sans avoir à coder en dur un nom de fichier absolu dans le test, ni à utiliser des chemins relatifs qui peuvent être source d’erreurs.

Le chemin renvoyé sera le premier chemin de la liste suivante qui correspond à un fichier ou un répertoire existant :

Si le fichier ou le répertoire nommé n'existe à aucun de ces emplacements, un avertissement est consigné dans le journal de test.

Par exemple, dans ce code :

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

Le fichier de données de test sera identifié comme étant le premier fichier existant parmi :

  • /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

Cela permet au test de trouver ses données de test, que le test ait été installé ou non, et que l’arborescence de compilation du test corresponde ou non à son arborescence source.

Remarque : pour garantir une détectionfiable des données de test à partir du répertoire source, il faut soit utiliser qmake, soit définir la macro ` QT_TESTCASE_BUILDDIR ` pour qu’elle pointe vers le répertoire de travail à partir duquel le compilateur est lancé, soit ne transmettre au compilateur que des chemins absolus vers les fichiers source. Sinon, le chemin absolu du répertoire source ne peut pas être déterminé.

Remarque : la macro ` QT_TESTCASE_BUILDDIR ` est également définie implicitement si CMake est utilisé et si le module ` QtTest ` est lié à la cible. Vous pouvez modifier l’ QT_TESTCASE_BUILDDIR e par défaut en définissant la propriété `QT_TESTCASE_BUILDDIR` sur la cible.

Remarque : pour les tests qui utilisent la macro ` QTEST_APPLESS_MAIN()` afin de générer une fonction ` main() `, ` QFINDTESTDATA ` ne tentera pas de rechercher les données de test relatives à ` QCoreApplication::applicationDirPath()`. En pratique, cela signifie que les tests utilisant ` QTEST_APPLESS_MAIN() ` ne parviendront pas à trouver leurs données de test s’ils sont exécutés à partir d’un arbre de compilation fantôme.

QSKIP(description)

Si elle est appelée depuis une fonction de test, la macro QSKIP() interrompt l'exécution du test sans ajouter d'échec au journal des tests. Vous pouvez l'utiliser pour ignorer les tests qui n'auraient pas de sens dans la configuration actuelle. Par exemple, un test de rendu des polices peut appeler QSKIP() si les polices requises ne sont pas installées sur le système de test.

Le texte « description » est ajouté au journal de test et doit contenir une explication indiquant pourquoi le test n’a pas pu être exécuté.

Si le test est basé sur des données, chaque appel à QSKIP() dans la fonction de test ne sautera que la ligne actuelle des données de test ; ainsi, un appel inconditionnel à QSKIP() produira un message de saut dans le journal de test pour chaque ligne de données de test.

Si elle est appelée depuis une fonction « _data », la macro QSKIP() interrompt l’exécution de la fonction « _data » et empêche l’exécution de la fonction de test associée. Cela omet entièrement un test piloté par les données. Pour omettre des lignes individuelles, rendez-les conditionnelles en utilisant une simple instruction « if (condition) newRow(...) << ... » dans la fonction « _data », au lieu d’utiliser QSKIP() dans la fonction de test.

Si elle est appelée depuis initTestCase_data(), la macro QSKIP() ignorera toutes les fonctions de test et d’ _data. Si elle est appelée depuis initTestCase() alors qu’il n’y a pas de initTestCase_data(), ou lorsque celle-ci ne configure qu’une seule ligne, QSKIP() ignorera de la même manière l’ensemble du test. En revanche, si initTestCase_data() contient plusieurs lignes, alors initTestCase() est appelée (suivie de chaque test, puis enfin de la synthèse) une fois par ligne. Par conséquent, un appel à QSKIP() dans initTestCase() se contentera d’ignorer toutes les fonctions de test pour la ligne actuelle de données globales, configurée par initTestCase_data().

Remarque : cette macro ne peut être utilisée que dans une fonction de test ou une fonction « _data » appelée par le framework de test.

Exemple :

if (!QSqlDatabase::drivers().contains("SQLITE"))
    QSKIP("This test requires the SQLITE database driver");
Ignorer les bogues connus

Si un test met en évidence un bogue connu qui ne sera pas corrigé immédiatement, utilisez la macro QEXPECT_FAIL() pour documenter l’échec et faire référence à l’identifiant de suivi du bogue correspondant au problème connu. Lorsque le test est exécuté, les échecs attendus seront marqués comme XFAIL dans la sortie du test et ne seront pas comptabilisés comme des échecs lors de la définition du code de retour du programme de test. Si un échec attendu ne se produit pas, le code XPASS (réussite inattendue) sera signalé dans la sortie du test et sera comptabilisé comme un échec du test.

Pour les bogues connus, la fonction ` QEXPECT_FAIL()` est préférable à `QSKIP()`, car un développeur ne peut pas corriger le bogue sans qu’un résultat `XPASS` lui rappelle que le test doit également être mis à jour. Si `QSKIP()` est utilisée, il n’y a aucun rappel pour réviser ou réactiver le test, sans quoi les régressions ultérieures ne seront pas signalées.

Voir également QEXPECT_FAIL() et Choisir les mécanismes appropriés pour exclure des tests.

QTEST(actual, testElement)

QTEST() est une macro de commodité pour la fonction QCOMPARE() qui compare la valeur actual à l'élément testElement issu des données du test. Si cet élément n'existe pas, le test déclenche une assertion.

À part cela, QTEST() se comporte exactement comme QCOMPARE().

Au lieu d'écrire :

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

vous pouvez écrire :

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

Voir également QCOMPARE().

QTEST_APPLESS_MAIN(TestClass)

Implémente une fonction main() qui exécute tous les tests de TestClass.

Se comporte comme QTEST_MAIN(), mais n'instancie pas d'objet QApplication. Utilisez cette macro pour des tests autonomes très simples, sans interface graphique.

Voir également QTEST_MAIN().

QTEST_GUILESS_MAIN(TestClass)

Implémente une fonction main() qui instancie un objet QCoreApplication et le fichier TestClass, puis exécute tous les tests dans l'ordre où ils ont été définis. Utilisez cette macro pour créer des exécutables autonomes.

Se comporte comme QTEST_MAIN(), mais instancie un objet QCoreApplication au lieu de l'objet QApplication. Utilisez cette macro si votre cas de test n'a pas besoin des fonctionnalités offertes par QApplication, mais que la boucle d'événements reste nécessaire.

Voir également QTEST_MAIN().

QTEST_MAIN(TestClass)

Implémente une fonction main() qui instancie un objet application et l'objet TestClass, puis exécute tous les tests dans l'ordre dans lequel ils ont été définis. Utilisez cette macro pour créer des exécutables autonomes.

Si QT_WIDGETS_LIB est défini, l’objet d’application sera de type QApplication; si QT_GUI_LIB est défini, l’objet d’application sera de type QGuiApplication; sinon, il sera de type QCoreApplication. Si qmake est utilisé et que la configuration inclut QT += widgets, alors QT_WIDGETS_LIB sera défini automatiquement. De même, si qmake est utilisé et que la configuration inclut QT += gui, alors QT_GUI_LIB sera défini automatiquement.

Exemple :

QTEST_MAIN(TestQString)

Voir également QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN() et QTest::qExec().

[since 6.8] QTEST_THROW_ON_FAIL

Une fois définies, les fonctions QCOMPARE() /QVERIFY() etc. génèrent systématiquement une exception en cas d'échec. La fonction QTest::setThrowOnFail() n'a alors plus aucun effet.

La définition de cette macro est utile si vous souhaitez utiliser QCOMPARE() ou QVERIFY() dans des fonctions dont le type de retour n’est pasvoid. Sans cette macro, QCOMPARE(), par exemple, se développe en une instruction incluant return;, et ne peut donc pas être utilisée dans des fonctions (ou des lambdas) qui renvoient autre chose que void, par exemple QString. Cela inclut le cas où le lancement d’exceptions n’est activé qu’au moment de l’exécution (à l’aide de QTest::setThrowOnFail(true)). Lorsque cette macro est définie, QCOMPARE() se développe en une instruction sans return;, qui peut être utilisée depuis n’importe quelle fonction.

Cette macro a été introduite dans Qt 6.8.

[since 6.8] QTEST_THROW_ON_SKIP

Lorsqu'elle est définie, la fonction ` QSKIP()` provoque systématiquement une exception. La fonction ` QTest::setThrowOnSkip()` n'a alors plus aucun effet.

La définition de cette macro est utile si vous souhaitez utiliser ` QSKIP()` dans des fonctions dont le type de retour n'est pas `void `. Sans cette macro, QSKIP(), par exemple, se développe en une instruction incluant return;, ce qui rend son utilisation impossible dans les fonctions (ou lambdas) qui renvoient autre chose que void, par exemple QString. Cela inclut le cas où le lancement d’exceptions n’est activé qu’au moment de l’exécution (à l’aide de QTest::setThrowOnSkip(true)). Lorsque cette macro est définie, ` QSKIP()` se développe en une instruction sans ` return;`, qui peut être utilisée depuis n’importe quelle fonction.

Cette macro a été introduite dans Qt 6.8.

QTRY_COMPARE(actual, expected)

Effectue une comparaison entre les valeurs « actual » et « expected » en appelant la fonction QTRY_COMPARE_WITH_TIMEOUT() avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() et QEXPECT_FAIL().

[since 6.4] QTRY_COMPARE_EQ(computed, baseline)

Effectue une comparaison entre les valeurs de ` computed ` et ` baseline ` en appelant ` QTRY_COMPARE_EQ_WITH_TIMEOUT ` avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ() et QTRY_COMPARE_EQ_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_EQ()`, mais effectue la comparaison des valeurs de ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’exécutio (en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’exécutio timeout est atteint, un échec est consigné dans le journal de test et le test n’est pas exécuté plus loin.

Depuis Qt 6.8, l’ timeout e peut également être un littéral de typestd::chrono , tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_EQ() et QTRY_COMPARE_EQ().

[since 6.4] QTRY_COMPARE_GE(computed, baseline)

Effectue une comparaison entre les valeurs de computed et baseline en appelant QTRY_COMPARE_GE_WITH_TIMEOUT avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_GE() et QTRY_COMPARE_GE_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_GE()`, mais effectue la comparaison des valeurs ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’exécution ` timeout ` (en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’exécution est atteint, un échec est consigné dans le journal de test et le test n’est pas exécuté plus loin.

Depuis Qt 6.8, l’ timeout e peut également être un littéral de type «std::chrono », tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_GE() et QTRY_COMPARE_GE().

[since 6.4] QTRY_COMPARE_GT(computed, baseline)

Effectue une comparaison entre les valeurs de computed et baseline en appelant QTRY_COMPARE_GT_WITH_TIMEOUT avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_GT() et QTRY_COMPARE_GT_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_GT()`, mais effectue la comparaison des valeurs ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’exécution ` timeout ` (en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’exécution est atteint, un échec est consigné dans le journal de test et le test n’est pas exécuté plus loin.

Depuis Qt 6.8, l’ timeout peut également être un littéral de typestd::chrono , tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_GT() et QTRY_COMPARE_GT().

[since 6.4] QTRY_COMPARE_LE(computed, baseline)

Effectue une comparaison entre les valeurs de ` computed ` et ` baseline ` en appelant ` QTRY_COMPARE_LE_WITH_TIMEOUT ` avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_LE() et QTRY_COMPARE_LE_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_LE()`, mais effectue la comparaison des valeurs ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’exécution ` timeout ` (en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’exécution est atteint, un échec est consigné dans le journal de test et le test n’est pas poursuivi.

Depuis Qt 6.8, l’ timeout peut également être un littéral de typestd::chrono , tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_LE() et QTRY_COMPARE_LE().

[since 6.4] QTRY_COMPARE_LT(computed, baseline)

Effectue une comparaison entre les valeurs de computed et baseline en appelant QTRY_COMPARE_LT_WITH_TIMEOUT avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_LT() et QTRY_COMPARE_LT_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_LT()`, mais effectue la comparaison des valeurs ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’expiration ` timeout ` (en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’expiration est atteint, un échec est consigné dans le journal de test et le test ne se poursuit pas.

Depuis Qt 6.8, l’ timeout peut également être un littéral de type « std::chrono », tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_LT() et QTRY_COMPARE_LT().

[since 6.4] QTRY_COMPARE_NE(computed, baseline)

Effectue une comparaison entre les valeurs de computed et baseline en appelant QTRY_COMPARE_NE_WITH_TIMEOUT avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également QCOMPARE_NE() et QTRY_COMPARE_NE_WITH_TIMEOUT().

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

Cette macro est similaire à ` QCOMPARE_NE()`, mais effectue la comparaison des valeurs de ` computed ` et ` baseline ` de manière répétée, jusqu’à ce que la comparaison renvoie ` true ` ou que le délai d’exécution ( timeout, en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’exécution est atteint, un échec est consigné dans le journal des tests et le test n’est pas exécuté plus loin.

Depuis Qt 6.8, l’ timeout peut également être un littéral de type « std::chrono », tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.4.

Voir également ` QCOMPARE_NE()` et ` QTRY_COMPARE_NE()`.

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

La macro `QTRY_COMPARE_WITH_TIMEOUT()` est similaire à ` QCOMPARE()`, mais effectue la comparaison des valeurs ` actual ` et ` expected ` de manière répétée, jusqu'à ce que les deux valeurs soient égales ou que le délai d'exécution ( timeout, en millisecondes) soit atteint. Entre chaque comparaison, les événements sont traités. Si le délai d’expiration est atteint, un échec est consigné dans le journal de test et le test n’est pas poursuivi.

Depuis Qt 6.8, l’ timeout peut également être un littéral de type « std::chrono », tel que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() et QEXPECT_FAIL().

QTRY_VERIFY2(condition, message)

Vérifie l'condition en appelant la fonction ` QTRY_VERIFY2_WITH_TIMEOUT()` avec un délai d'expiration de cinq secondes. Si condition reste alors à « false », la valeur message est renvoyée. La valeur message est une chaîne de caractères C simple.

Exemple :

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

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() et QEXPECT_FAIL().

QTRY_VERIFY(condition)

Vérifie l'condition en appelant la fonction QTRY_VERIFY_WITH_TIMEOUT() avec un délai d'expiration de cinq secondes.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() et QEXPECT_FAIL().

QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

La macro QTRY_VERIFY2_WITH_TIMEOUT est similaire à ` QTRY_VERIFY_WITH_TIMEOUT()` à ceci près qu’elle génère un message d’ message détaillé lorsque ` condition ` est toujours faux après l’ timeout spécifiée (en millisecondes). ` message ` est une chaîne de caractères C simple.

Depuis Qt 6.8, l’ timeout peut également être un littéral de type « std::chrono », tel que 2s.

Exemple :

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

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() et QEXPECT_FAIL().

QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

La macro `QTRY_VERIFY_WITH_TIMEOUT()` est similaire à la fonction ` QVERIFY()`, mais vérifie la condition ` condition ` à plusieurs reprises, jusqu’à ce que la condition devienne vraie ou que le délai d’expiration ` timeout ` (en millisecondes) soit atteint. Entre chaque évaluation, les événements sont traités. Si le délai d’expiration est atteint, un échec est consigné dans le journal de test et le test ne se poursuit pas.

Depuis Qt 6.8, l'timeout peut également être une valeur littérale d'std::chrono , telle que 2s.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Voir également QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() et QEXPECT_FAIL().

QVERIFY2(condition, message)

La macro QVERIFY2() se comporte exactement comme la fonction QVERIFY(), à ceci près qu’elle renvoie une « message » lorsque condition est faux. La « message » est une chaîne de caractères C simple.

Le message peut également être obtenu à partir d’un appel de fonction produisant une chaîne de caractères C simple, telle que qPrintable() appliquée à une valeur de type « QString », qui peut être construite de l’une de ses manières habituelles, y compris en appliquant .args() pour formater certaines données.

Exemple :

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

Par exemple, si vous disposez d’un objet fichier et que vous testez sa fonction ` open() `, vous pourriez écrire un test avec une instruction du type :

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

Si ce test échoue, il ne donnera aucune indication sur la raison pour laquelle le fichier n'a pas pu s'ouvrir :

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

Si vous pouvez générer un message d’erreur plus explicite à partir des valeurs testées, vous pouvez utiliser ` QVERIFY2() ` pour transmettre ce message en même temps que votre condition de test, afin d’afficher un message plus explicite en cas d’échec :

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

Si cette branche est testée dans le système de CI de Qt, le message d’échec détaillé ci-dessus sera inséré dans le résumé publié sur le système de révision de code :

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

Voir également QVERIFY(), QCOMPARE(), QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

QVERIFY(condition)

La macro QVERIFY() vérifie si l'condition est vraie ou non. Si elle est vraie, l'exécution se poursuit. Dans le cas contraire, un échec est consigné dans le journal de test et le test n'est pas exécuté davantage.

Vous pouvez utiliser QVERIFY2() lorsque cela s’avère pratique et utile pour ajouter des informations supplémentaires au rapport d’échec du test.

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Par exemple, le code suivant montre comment utiliser cette macro pour vérifier la validité d’un objet ` QSignalSpy ` :

QVERIFY(spy.isValid());

Pour obtenir plus d’informations sur l’échec, utilisez ` QCOMPARE(x, y) ` plutôt que ` QVERIFY(x == y)`, car elle indique à la fois la valeur attendue et la valeur réelle lorsque la comparaison échoue.

Voir également QCOMPARE(), QTRY_VERIFY(), QSignalSpy, QEXPECT_FAIL(), QCOMPARE_EQ(), QCOMPARE_NE(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

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

La macro QVERIFY_THROWS_EXCEPTION exécute l'expression fournie dans l'argument variadique et s'attend à intercepter une exception levée par cette expression.

Plusieurs cas de figure sont possibles :

  • Si l’expression lève une exception qui est soit identique à exceptiontype, soit dérivée de exceptiontype, l’exécution se poursuit.
  • Sinon, si l'expression ne lève aucune exception, ou si l'exception levée dérive de std::exception, un échec sera alors consigné dans le journal de test et la macro retournera prématurément (à la fonction qui l'encadre).
  • Si l’exception levée n’est dérivée ni de ` std::exception ` ni de ` exceptiontype`, un échec sera consigné dans le journal de test et l’exception sera relancée. Cela permet d’éviter les problèmes liés, par exemple, aux exceptions d’annulation pthread.

La macro utilise des arguments variadiques afin que l’expression puisse contenir des virgules, que le préprocesseur considère comme des séparateurs d’arguments, par exemple comme dans

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 -----------------------/

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.3.

[since 6.3] QVERIFY_THROWS_NO_EXCEPTION(...)

La macro QVERIFY_THROWS_NO_EXCEPTION exécute l'expression fournie dans son argument variadique et tente d'intercepter toute exception levée par cette expression.

Plusieurs cas de figure sont possibles :

  • Si l'expression ne lève pas d'exception, l'exécution se poursuit.
  • Dans le cas contraire, si une exception dérivée de std::exception est interceptée, un échec sera consigné dans le journal de test et la macro retournera prématurément (retour implicite depuis la fonction englobante).
  • Si une exception ne dérivant pas de ` std::exception ` est interceptée, un échec sera consigné dans le journal de test et l’exception sera relancée. Cela permet d’éviter les problèmes liés, par exemple, aux exceptions d’annulation pthread.

La macro utilise des arguments variadiques ; l’expression peut donc contenir des virgules que le préprocesseur considère comme des séparateurs d’arguments, par exemple comme dans

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

Remarque : cette macro ne peut être utilisée que dans une fonction de test appelée par le framework de test.

Cette macro a été introduite dans Qt 6.3.

© 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.