Sur cette page

QTest Namespace

L'espace de noms QTest contient toutes les fonctions et déclarations liées à Qt Test. 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(QSizePolicy sp)
char *toString(const T &value)
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(lhs, rhs, ordre)
(since 6.4) QCOMPARE_EQ(calculé, ligne de base)
(since 6.4) QCOMPARE_GE(calculé, ligne de base)
(since 6.4) QCOMPARE_GT(calculé, ligne de base)
(since 6.4) QCOMPARE_LE(calculé, ligne de base)
(since 6.4) QCOMPARE_LT(calculé, ligne de base)
(since 6.4) QCOMPARE_NE(calculé, ligne de base)
QEXPECT_FAIL(dataIndex, commentaire, mode)
QFAIL(message)
QFETCH(type, nom)
QFETCH_GLOBAL(type, nom)
QFINDTESTDATA(nom de fichier)
QSKIP(description)
QTEST(réel, testElement)
QTEST_APPLESS_MAIN(ClasseTest)
QTEST_GUILESS_MAIN(ClasseTest)
QTEST_MAIN(ClasseTest)
(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é, ligne de base)
(since 6.4) QTRY_COMPARE_EQ_WITH_TIMEOUT(calculé, ligne de base, délai)
(since 6.4) QTRY_COMPARE_GE(calculé, ligne de base)
(since 6.4) QTRY_COMPARE_GE_WITH_TIMEOUT(calculé, ligne de base, délai d'attente)
(since 6.4) QTRY_COMPARE_GT(calculé, ligne de base)
(since 6.4) QTRY_COMPARE_GT_WITH_TIMEOUT(calcul, ligne de base, délai d'attente)
(since 6.4) QTRY_COMPARE_LE(calcul, ligne de base)
(since 6.4) QTRY_COMPARE_LE_WITH_TIMEOUT(calcul, ligne de base, délai d'attente)
(since 6.4) QTRY_COMPARE_LT(calcul, ligne de base)
(since 6.4) QTRY_COMPARE_LT_WITH_TIMEOUT(calcul, ligne de base, délai d'attente)
(since 6.4) QTRY_COMPARE_NE(calcul, ligne de base)
(since 6.4) QTRY_COMPARE_NE_WITH_TIMEOUT(calculé, ligne de base, délai d'attente)
QTRY_COMPARE_WITH_TIMEOUT(réel, prévu, délai)
QTRY_VERIFY2(condition, message)
QTRY_VERIFY(condition)
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, délai)
QTRY_VERIFY_WITH_TIMEOUT(condition, délai)
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

Voir l'aperçu deQt Test pour des informations sur la façon d'écrire des tests unitaires.

Classes

classe QTouchEventSequence

La classe QTouchEventSequence est utilisée pour simuler une séquence d'événements tactiles. Plus d'informations...

classe QTouchEventWidgetSequence

La classe QTouchEventWidgetSequence permet de simuler une séquence d'événements tactiles pour un widget. Plus d'informations...

classe ThrowOnFailDisabler

classe ThrowOnFailEnabler

classe ThrowOnSkipDisabler

classe ThrowOnSkipEnabler

Documentation de type

enum QTest::KeyAction

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

ConstanteValeurDescription de l'action
QTest::Press0La touche est enfoncée.
QTest::Release1La touche est relâchée.
QTest::Click2La touche est cliquée (appuyée et relâchée).
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 de l'action
QTest::MousePress0Un bouton de la souris est enfoncé.
QTest::MouseRelease1Un bouton de la souris est relâché.
QTest::MouseClick2Un bouton de la souris est cliqué (enfoncé et relâché).
QTest::MouseDClick3Un bouton de la souris est doublement cliqué (pressé et relâché deux fois).
QTest::MouseMove4Le pointeur de la souris s'est déplacé.

enum QTest::QBenchmarkMetric

Cette liste énumère tous les éléments qui peuvent faire l'objet d'une évaluation comparative.

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 CPU
QTest::CPUCycles10Cycles de l'unité centrale
QTest::RefCPUCycles30Cycles de référence de l'unité centrale
QTest::BusCycles11Cycles du bus
QTest::StalledCycles12Cycles bloqués
QTest::InstructionReads5Lecture d'instructions
QTest::Instructions13Instructions exécutées
QTest::BranchInstructions14Instructions de type "Branch" (branchement)
QTest::BranchMisses15Instructions de branchement mal prédites
QTest::CacheReferences16Accès à la mémoire cache de tout type
QTest::CacheMisses20Accès manqués à la mémoire cache, quel que soit le type
QTest::CacheReads17Lecture/chargement de la mémoire cache
QTest::CacheReadMisses21Manquements à la lecture / au chargement de la mémoire cache
QTest::CacheWrites18Écritures en cache / stockages
QTest::CacheWriteMisses22Manquements au niveau de l'écriture et du stockage de la mémoire de cache
QTest::CachePrefetches19Prélèvements de la mémoire de cache
QTest::CachePrefetchMisses23Manquements à la prélecture de la mémoire cache
QTest::ContextSwitches24Changements de contexte
QTest::PageFaults25Défauts de page de tout type
QTest::MinorPageFaults26Défauts de page mineurs
QTest::MajorPageFaults27Défauts de page majeurs
QTest::AlignmentFaults28Défauts dus à un mauvais alignement
QTest::EmulationFaults29Défauts nécessitant une émulation logicielle

Notez que WalltimeNanoseconds et BytesAllocated ne sont fournis que pour une utilisation via setBenchmarkResult(), et que les résultats de ces mesures ne peuvent pas être fournis automatiquement par le cadre QTest.

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

enum QTest::TestFailMode

Cette énumération décrit les modes de traitement d'une vérification, telle que celle effectuée par les macros QVERIFY() ou QCOMPARE(), dont on sait qu'elle échouera. Le mode s'applique indépendamment de l'échec ou de la réussite du contrôle.

ConstanteValeurDescription
QTest::Abort1Abandonne l'exécution du test. Utilisez ce mode lorsqu'il n'est pas judicieux de poursuivre l'exécution du test après le contrôle problématique.
QTest::Continue2Poursuit l'exécution du test après le contrôle problématique.

Voir également QEXPECT_FAIL().

Variable Documentation

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

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

Le cas d'utilisation le plus typique de cette variable est la modification du délai d'attente 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 le définir pour une portée spécifique, en utilisant QAtomicScopedValueRollback:

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

Pour accéder à la 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 pour les compilateurs bogués et peut être ignoré.

Pour remplir la colonne avec des valeurs, newRow() peut être utilisé. Utilisez QFETCH() pour récupérer les données dans le test actuel.

Exemple :

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

Note : Cette fonction ne peut être utilisée que dans le cadre de la fonction de données d'un test qui est invoquée par le cadre de test.

Voir Data Driven Testing pour un exemple plus complet.

Voir aussi 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. Voir la documentation de std::snprintf() pour 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 qui résulte de ce formatage.

Renvoie une référence QTestData qui peut être utilisée pour introduire des données, une valeur pour chaque 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");

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

Voir Data Driven Testing pour un exemple plus complet.

Voir aussi newRow(), addColumn() et QFETCH().

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

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

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

Renvoie les unités de mesure pour le site metric spécifié.

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

Crée un dispositif tactile fictif de type devType avec des capacités caps pour la simulation d'événements tactiles.

Le périphérique tactile sera enregistré avec l'interface du système de fenêtres Qt. Vous devriez généralement utiliser createTouchDevice() pour initialiser une variable membre 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 aussi QTest::QTouchEventSequence et touchEvent().

const char *QTest::currentAppName()

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

const char *QTest::currentDataTag()

Renvoie le nom des données de test actuelles. Si le test n'a pas de données de test assignées, la fonction renvoie nullptr.

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

Renvoie le nom des données de test globales actuelles. Si le test n'a pas de données de test globales assignées, 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 actuelle a échoué ou a été ignorée.

Ceci s'applique si le test a échoué ou a exercé un saut. Lorsque cette condition est remplie, la fonction de test doit être renvoyée plus tôt que prévu. En particulier, les macros QTRY_* et la boucle d'événements de test terminent leurs boucles plus tôt si elles sont exécutées pendant la fonction de test (mais pas son cleanup()). Après qu'un test a appelé une fonction d'aide qui utilise les macros de ce module, il peut utiliser cette fonction pour tester s'il faut retourner plus tôt.

Cette fonction a été introduite dans Qt 6.5.

Voir aussi QTest::currentTestFailed().

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

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

La fonction de test poursuit son exécution lorsqu'un échec est ajouté. Pour interrompre le test à la place, vous pouvez vérifier currentTestFailed() et retourner plus tôt si c'est le cas true.

Pour chaque avertissement, le premier motif qui correspond provoquera un échec, et les autres motifs seront ignorés.

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

void FileTest::loadFiles() { QTest::failOnWarning(QRegularExpression("^Echec du chargement")) ; // Chacun de ces éléments entraînera un é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é, passez une expression régulière appropriée à cette fonction dans init():

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

Pour le cas courant d'échec sur n'importe quel avertissement, ne pas passer de paramètre :

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

Remarque : ignoreMessage() a la priorité sur cette fonction, de sorte que tout avertissement correspondant à un motif donné à la fois à ignoreMessage() et à failOnWarning() sera ignoré.

Cette fonction a été introduite dans Qt 6.3.

Voir aussi QTEST_FATAL_FAIL.

[since 6.8] void QTest::failOnWarning()

Ajoute un échec de test au journal de test si un avertissement est émis.

Cette fonction surcharge QTest::failOnWarning().

Cette fonction a été introduite dans Qt 6.8.

Voir aussi failOnWarning(const char *).

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

Ajoute un échec de test au journal de test si l'adresse message est affichée.

Cette fonction surcharge QTest::failOnWarning().

Cette fonction a été introduite dans Qt 6.3.

Voir aussi failOnWarning().

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

Ignore les messages créés par qDebug(), qInfo() ou qWarning(). Si le message message avec le message type correspondant est émis, il sera supprimé du journal des tests. Si le test s'est terminé et que le message message n'a pas été envoyé, un échec du test est ajouté au journal du test.

Remarque : l'invocation 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 teste que QDir::mkdir() émet le bon avertissement lorsqu'il est invoqué avec un nom de fichier non valide.

Note : message sera interprété comme UTF-8.

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

Ignore les messages créés par qDebug(), qInfo() ou qWarning(). Si le message correspondant à messagePattern et à type est émis, il sera supprimé du journal des tests. Si le test s'est terminé et que le message n'a pas été émis, un échec du test est ajouté au journal du test.

Remarque : l'invocation de cette fonction ne permet d'ignorer qu'un seul message. Si le message que vous souhaitez ignorer est émis 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 le clic de key avec une option modifier sur widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant de cliquer sur la touche.

Exemples :

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

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

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

Voir aussi QTest::keyClicks().

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

Simule le clic de key avec une option modifier sur widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant de cliquer sur la touche.

Exemple :

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

L'exemple ci-dessus simule le clic de a sur myWidget sans aucun modificateur de clavier et sans retard du test.

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

Voir aussi QTest::keyClicks().

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

Simule le clic de key avec une option modifier sur window. Si delay est plus grand que 0, le test attendra delay millisecondes avant de cliquer sur la touche.

Exemples :

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

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

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

Voir aussi QTest::keyClicks().

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

Simule le clic de key avec une option modifier sur window. Si delay est plus grand que 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 le clic de a sur myWindow sans aucun modificateur de clavier et sans retard du test.

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

Voir aussi QTest::keyClicks().

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

Simule le clic d'une sequence de touches sur une widget. En option, un clavier modifier peut être spécifié ainsi qu'une delay (en millisecondes) du test avant chaque clic de touche.

Exemple :

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

L'exemple ci-dessus simule le clic de la séquence de touches représentant "hello world" sur myWidget sans aucun modificateur de clavier et sans délai du test.

Voir aussi 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'adresse key donnée et une adresse action associée. En option, un clavier modifier peut être spécifié, 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 la touche donnée ascii et une action associée. En option, un clavier modifier peut être spécifié, 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'adresse key donnée et une adresse action associée. En option, un clavier modifier peut être spécifié, 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, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Envoie un événement de touche Qt à window avec la touche donnée ascii et une action associée. En option, un clavier modifier peut être spécifié, 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::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)

Simule l'appui sur une touche key avec une option modifier sur une touche widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devez relâcher la touche en utilisant keyRelease().

Voir aussi 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 une option modifier sur une touche widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devez relâcher la touche en utilisant keyRelease().

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

Voir aussi QTest::keyRelease() et QTest::keyClick().

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

Simule l'appui sur une touche key avec une option modifier sur une touche window. Si delay est plus grand que 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devez relâcher la touche en utilisant keyRelease().

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

Voir aussi 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 une option modifier sur une touche window. Si delay est plus grand que 0, le test attendra delay millisecondes avant d'appuyer sur la touche.

Remarque : à un moment donné, vous devez relâcher la touche en utilisant keyRelease().

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

Voir aussi 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'une clé key avec une option modifier sur une clé widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant de libérer la clé.

Voir aussi 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 option modifier sur une clé widget. Si delay est plus grand que 0, le test attendra delay millisecondes avant de libérer la clé.

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

Voir aussi 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 une option modifier sur une clé window. Si delay est plus grand que 0, le test attendra delay millisecondes avant de libérer la clé.

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

Voir aussi 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 une option modifier sur une clé window. Si delay est plus grand que 0, le test attendra delay millisecondes avant de libérer la clé.

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

Voir aussi QTest::keyClick().

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

Simule le typage de keySequence en widget.

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

Voir aussi QTest::keyClick() et QTest::keyClicks().

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

Simule le typage de keySequence en window.

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

Voir aussi 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 le clic d'une souris button avec un modifier optionnel 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 spécifié avant d'appuyer 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 le clic d'une souris button avec un modificateur optionnel stateKey sur un 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 spécifié avant d'appuyer sur le bouton et de le relâcher.

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

Voir aussi 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 le double clic d'une souris button avec un modifier optionnel 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 spécifié avant chaque pression et relâchement.

Voir aussi 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 un modificateur optionnel stateKey sur 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 spécifié avant chaque pression et relâchement.

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

Voir aussi 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 donné, 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 adresse window. Si pos n'est pas spécifié, le pointeur de la souris se déplace vers le centre de la fenêtre. Si un delay (en millisecondes) est donné, le test 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 l'appui d'une souris button avec un modifier optionnel 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 spécifié avant d'appuyer.

Voir aussi 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'appui d'une souris button avec un modificateur optionnel stateKey sur un 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 spécifié avant d'appuyer.

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

Voir aussi 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'une souris button avec une option modifier sur une 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 spécifié avant de relâcher le bouton ; sinon, il attendra le temps par défaut (1 ms), qui peut être modifié par les arguments de la ligne de commande.

Remarque : si vous souhaitez tester un double-clic en envoyant les événements individuellement, spécifiez un délai court, supérieur au délai par défaut, pour les deux événements de relâchement de la souris. Le total des délais pour l'appui, le relâchement, l'appui et le relâchement doit être inférieur à 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);

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'une souris button avec un modificateur optionnel stateKey sur un bouton 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 spécifié avant de relâcher le bouton ; sinon, il attendra le temps par défaut (1 ms), qui peut être modifié par les arguments de la ligne de commande.

Remarque : si vous souhaitez tester un double-clic en envoyant les événements individuellement, spécifiez un délai court, supérieur au délai par défaut, pour les deux événements de relâchement de la souris. Le total des délais pour l'appui, le relâchement, l'appui et le relâchement doit être inférieur à 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 aussi QTest::mousePress() et QTest::mouseClick().

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

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

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

Renvoie une référence QTestData qui peut être utilisée pour intégrer des données, une valeur pour chaque 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 cadre de test.

Voir Data Driven Testing pour un exemple plus complet.

Voir aussi addRow(), addColumn() et QFETCH().

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

Exécute les tests déclarés dans testObject. En outre, 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.

Les arguments de ligne de commande argc et argv peuvent être fournis en option. Pour obtenir la liste des arguments reconnus, consultez Qt Test Arguments de ligne de commande.

L'exemple suivant exécute tous les tests de 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 la ligne de commande et exécute les tests, ce qui évite d'appeler explicitement cette fonction.

La valeur de retour de cette fonction est également le 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 pour l'enregistrement des résultats des tests dans des fichiers et l'exécution des fonctions de test individuelles ne se comporteront pas correctement.

Remarque : cette fonction n'est pas réentrante, un seul test peut être exécuté à la fois. Un test qui a été exécuté avec qExec() ne peut pas exécuter un autre test via qExec() et les threads ne sont pas autorisés à appeler qExec() simultanément.

Si vous avez créé les arguments par programme, plutôt que de les obtenir à partir des arguments de main(), il est probablement intéressant d'utiliser QTest::qExec(QObject *, const QStringList &) puisqu'il est sûr pour Unicode.

Voir aussi QTEST_MAIN(), QTEST_GUILESS_MAIN(), et QTEST_APPLESS_MAIN().

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

Se comporte de manière identique à qExec(QObject *, int, char**) mais prend un QStringList de arguments au lieu d'une liste de char**.

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

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

Extrait un répertoire des ressources sur le disque. Le contenu est extrait récursivement dans un dossier temporaire. Le contenu extrait est supprimé automatiquement dès que la dernière référence à la valeur de retour sort du champ d'application.

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

Renvoie le répertoire temporaire dans lequel les données ont été extraites ou 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 de cas de test pour le binaire actuel.

L'adresse name sera répertoriée lors de l'exécution du binaire de test par lots sans paramètres. L'exécution du binaire de test avec l'argv[1] de name entraînera l'appel de entryFunction.

Cette fonction a été introduite dans Qt 6.5.

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

Dort pour msecs, bloquant l'exécution du test.

Cette méthode ne traitera aucun événement et laissera votre test sans réponse. La communication réseau peut être interrompue pendant le sommeil. Utilisez QTest::qWait() pour une mise en veille non bloquante.

msecs doit être supérieur à 0ms.

Note : A partir de Qt 6.7, cette fonction est implémentée en utilisant std::this_thread::sleep_for, donc la précision du temps passé 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, de sorte que l'exactitude du temps passé dans cette fonction dépendait du système d'exploitation.

Exemple :

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

Cette fonction a été introduite dans Qt 6.7.

Voir aussi QTest::qWait().

void QTest::qSleep(int ms)

Dort pendant ms millisecondes, bloquant ainsi l'exécution du test.

Équivalent à l'appel :

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

Ceci est une fonction surchargée.

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

Attend msecs. Pendant cette 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 un maximum d'environ 12,5 secondes.

Les macros QTRY_* sont généralement un meilleur choix que qWait(). qWait() fait toujours une pause pendant la durée totale, ce qui peut laisser le test inactif et ralentir l'exécution.

Les macros QTRY_* interrogent la condition jusqu'à ce qu'elle réussisse 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 msecs. Équivalent à l'appel :

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

Ceci est 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 jusqu'à ce que deadline ait expiré ou jusqu'à ce que predicate renvoie un message vrai, selon ce qui se produit en premier.

Renvoie true si predicate est devenu vrai à un moment donné, sinon 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 un maximum de trois secondes.

Cette fonction a été introduite dans Qt 6.7.

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

Attend timeout millisecondes ou jusqu'à ce que predicate retourne vrai.

Cela équivaut à appeler :

qWaitFor(predicate, QDeadlineTimer(timeout));

Ceci est une fonction surchargée.

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

Renvoie true si widget est actif dans les timeout millisecondes. Sinon, elle renvoie false.

Cette méthode est utile dans les tests qui appellent QWidget::show() et s'appuient sur le fait que le widget est réellement actif (c'est-à-dire qu'il est visible et qu'il a le focus) avant de continuer.

Remarque : la méthode est interrompue et renvoie false si une autre fenêtre empêche widget d'être actif.

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

Voir aussi qWaitForWindowExposed() et QWidget::isActiveWindow().

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

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

Cette méthode est utile dans les tests qui appellent QWindow::show() et s'appuient sur le fait que la fenêtre est réellement active (c'est-à-dire qu'elle est visible et qu'elle a le focus) avant de continuer.

Remarque : la méthode est interrompue et renvoie false si une autre fenêtre empêche window d'être active.

Remarque : le focus étant une propriété exclusive, window 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.10.

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

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

Cette fonction utilise le délai d'attente 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'attente 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'adresse timeout est exprimée en millisecondes.

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

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

L'adresse timeout 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 exposé dans les timeout millisecondes. Sinon, elle renvoie false.

Cette méthode est utile dans les tests qui appellent QWidget::show() et s'appuient sur le fait que le widget est effectivement visible avant de continuer.

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

Cette fonction a été introduite dans Qt 6.10.

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

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

Renvoie true, si window est exposé à l'intérieur de timeout. Sinon, renvoie false.

Cette méthode est utile dans les tests qui appellent QWindow::show() et s'appuient sur le fait que la fenêtre est effectivement visible avant de poursuivre.

Remarque : une fenêtre mappée à l'écran peut ne pas être considérée comme exposée si la zone client de la fenêtre n'est pas visible, par exemple parce qu'elle est complètement recouverte par d'autres fenêtres. Dans ce cas, la méthode est interrompue 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'attente 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'attente 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'adresse timeout est exprimée en millisecondes.

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

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

L'adresse timeout 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 de focus dans timeout. Sinon, renvoie false.

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

Remarque : la méthode est interrompue et renvoie false si une autre fenêtre empêche widget d'avoir le focus.

Remarque : le focus étant une propriété exclusive, widget peut perdre le 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.7] bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)

Renvoie true, si window est la fenêtre principale de timeout. Sinon, renvoie false.

Cette méthode est utile dans les tests qui appellent QWindow::show() et qui dépendent de la focalisation de la fenêtre (pour recevoir des événements clavier par exemple) avant de continuer.

Remarque : la méthode est interrompue et renvoie false si une autre fenêtre empêche window d'avoir le focus.

Remarque : le focus étant une propriété exclusive, window 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.10] bool QTest::qWaitForWindowFocused(QWidget *widget)

Cette fonction utilise le délai d'attente 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'attente 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 du benchmark pour cette fonction de test à result.

Utilisez cette fonction si vous souhaitez communiquer les résultats du 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 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 rapportés précédemment.

Notez que l'argument de ligne de commande -iterations n'a aucun effet sur les fonctions de test sans la macro QBENCHMARK.

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

Active (enable = true) ou désactive ( enable = false) le lancement en cas d'échec de QCOMPARE()/QVERIFY() (par opposition au simple retour du contexte de la fonction immédiatement environnante).

La fonction est comptabilisée par référence : 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.

Note : Vous devez compiler vos tests avec les exceptions activées pour utiliser cette fonction.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi 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 sur QSKIP() (par opposition au simple retour du contexte de la fonction immédiatement environnante).

La fonction est comptée par référence : 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.

Note : Vous devez compiler vos tests avec les exceptions activées pour utiliser cette fonction.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi setThrowOnFail(), ThrowOnSkipEnabler, ThrowOnSkipDisabler, et QTEST_THROW_ON_SKIP.

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

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

length est la longueur de la chaîne ba.

char *toString(QSizePolicy sp)

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

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

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

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

Vous pouvez ajouter des spécialisations ou des surcharges de cette fonction à votre test pour activer la sortie verbose.

Note : A partir de Qt 5.5, vous devriez préférer fournir une fonction toString() dans l'espace de noms du type au lieu de spécialiser ce modèle. Si votre code doit continuer à fonctionner avec la QTestLib de Qt 5.4 ou antérieure, vous devez continuer à utiliser la spécialisation.

Note : L'appelant de toString() doit supprimer les données retournées en utilisant delete[]. Votre implémentation doit retourner une chaîne de caractères créée avec new[] ou qstrdup(). La façon la plus simple de le faire est de créer un QByteArray ou un QString et d'appeler QTest::toString() sur celui-ci (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 toString() pour une classe appelée MyPoint. Chaque fois qu'une comparaison de 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 surcharge (Qt ≥ 5.5) :

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

Voir aussi QCOMPARE().

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 aussi QTest::toHexRepresentation().

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

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

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

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

Renvoie une représentation textuelle de l'adresse character.

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

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

Renvoie une représentation textuelle de l'adresse date.

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 touches 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'adresse string.

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

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

Renvoie une représentation textuelle de l'adresse point.

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

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

Renvoie une représentation textuelle de l'adresse point.

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

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

Renvoie une représentation textuelle de l'adresse rectangle.

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

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

Renvoie une représentation textuelle de l'adresse rectangle.

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

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

Renvoie une représentation textuelle de l'adresse size.

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

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

Renvoie une représentation textuelle de l'adresse size.

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

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

Renvoie une représentation textuelle de l'adresse string.

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

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

Renvoie une représentation textuelle de l'adresse string.

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

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

Renvoie une représentation textuelle de l'adresse time.

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

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

Renvoie une représentation textuelle de l'adresse url.

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

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

Renvoie une représentation textuelle de l'adresse uuid.

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

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

Renvoie une représentation textuelle de l'adresse variant.

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 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'adresse tuple.

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

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

Renvoie une chaîne de caractères 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 QTouchEventSequence pour le device afin de simuler les événements du widget.

Lors de l'ajout d'événements tactiles à la séquence, widget sera également utilisé pour traduire 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 enregistrés dans le système d'événements lorsque le destructeur de QTouchEventSequence est appelé (c'est-à-dire lorsque l'objet renvoyé sort du champ d'application), à moins que autoCommit ne soit défini comme faux. Lorsque autoCommit est faux, commit() doit être appelé manuellement.

createTouchDevice() peut être appelé pour créer un dispositif tactile de test à utiliser avec cette fonction.

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

Crée et renvoie un QTouchEventSequence pour le device afin de simuler les événements du window.

Lors de l'ajout d'événements tactiles à la séquence, window sera également utilisé pour traduire 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 enregistrés dans le système d'événements lorsque le destructeur de QTouchEventSequence est appelé (c'est-à-dire lorsque l'objet renvoyé sort du champ d'application), à moins que autoCommit ne soit défini comme faux. Lorsque autoCommit est faux, commit() doit être appelé manuellement.

createTouchDevice() peut être appelé pour créer un dispositif 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 roue dans window à la position pos dans les coordonnées locales de la fenêtre. angleDelta contient l'angle de rotation de la roue. Une valeur positive signifie une rotation vers l'avant, et une valeur négative signifie une rotation vers l'arrière. pixelDelta contient la distance de défilement en pixels sur 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 est utilisée pour mesurer la performance du code dans un test. Le code à évaluer est contenu dans un bloc de code qui suit cette macro.

Par exemple, le code à évaluer est contenu dans un bloc de code qui suit cette macro :

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 aussi Création d'une analyse comparative et Écriture d'une analyse comparative.

QBENCHMARK_ONCE

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

Cette macro est utilisée pour mesurer la performance du code dans un test. Le code à évaluer est contenu dans un bloc de code suivant cette macro.

Contrairement à QBENCHMARK, le contenu du bloc de code n'est exécuté qu'une seule fois. Le temps écoulé sera signalé par "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 en utilisant l'opérateur d'égalité. Si actual et expected correspondent, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Respectez toujours la sémantique des paramètres de QCOMPARE(). Le premier paramètre qui lui est passé doit toujours être la valeur réelle produite par le code sous test, tandis que le second paramètre doit toujours être la valeur attendue. Lorsque les valeurs ne correspondent pas, QCOMPARE() les affiche avec les étiquettes Actual et Expected. Si l'ordre des paramètres est inversé, le débogage d'un test qui échoue peut être déroutant et les tests qui attendent zéro peuvent échouer en raison d'erreurs d'arrondi.

QCOMPARE() essaie d'afficher le contenu des valeurs si la comparaison échoue, de sorte que le journal de test indique pourquoi la comparaison a échoué.

Exemple :

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

Lors de la comparaison de types à virgule flottante (float, double, et qfloat16), qFuzzyCompare() est utilisé pour les valeurs finies. Si qFuzzyIsNull() est vrai pour les deux valeurs, elles sont également considérées comme égales. Les infinis correspondent s'ils ont le même signe, et tout NaN en tant que valeur réelle correspond à tout NaN en tant que valeur attendue (même si NaN != NaN, même s'ils sont identiques).

Lors de la comparaison de QList, les tableaux et les listes d'initialisateurs du type de valeur peuvent être transmis comme valeur attendue :

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

Notez que l'utilisation de listes d'initialisateurs nécessite la définition d'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 invoquée par le cadre de test.

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à publier dans le journal de test.

Exemple :

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

Le retour de toString() doit être un new char [], c'est-à-dire qu'il doit être libéré avec delete[] (plutôt que free() ou delete) une fois que le code appelant en a terminé avec lui.

Voir aussi 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, et 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 enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications. La macro n'accepte que les types de commande Qt: : et std: : comme argument order, sinon elle affirme.

Remarque : order peut être un type de commande Qt: : même si decltype(lhs <=> rhs) est un type de commande 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) a un type de commande faible, l'argument order ne peut pas avoir de type de commande partiel ou fort.

Remarque : la macro ne fonctionne que si le compilateur prend en charge l'opérateur <=>. Dans le cas contraire, elle affirme statiquement que la fonctionnalité pré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.

Note : Cette macro ne peut être utilisée que dans une fonction de test invoquée par le cadre de test.

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher 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 en utilisant l'opérateur d'égalité. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed == baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Remarque : contrairement à QCOMPARE(), cette macro ne fournit pas de surcharge pour les types personnalisés et les pointeurs. Ainsi, en passant par exemple deux valeurs const char * comme paramètres, on compare des pointeurs, alors que QCOMPARE() compare des chaînes de style C.

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 baseline en utilisant l'opérateur plus grand que ou égal à. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed >= baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et les valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 plus grand que baseline à l'aide de l'opérateur plus grand que. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed > baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et les valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 en utilisant l'opérateur less-than-or-equal-to. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed <= baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et les valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 moins que. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed < baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et les valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et la fonction de test retourne sans tenter d'autres vérifications.

Cette macro est généralement similaire à l'appel de QVERIFY(computed != baseline);, mais elle imprime un message d'erreur formaté indiquant les expressions et les valeurs des arguments de computed et baseline en cas d'échec.

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

Pour vos propres classes, vous pouvez surcharger QTest::toString() pour formater les valeurs à afficher dans le journal de test.

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_EQ(), QCOMPARE_LT(), QCOMPARE_LE(), QCOMPARE_GT() et QCOMPARE_GE().

QEXPECT_FAIL(dataIndex, comment, mode)

La macro QEXPECT_FAIL() marque le prochain QCOMPARE() ou QVERIFY() comme un échec attendu. Au lieu d'ajouter un échec au journal des tests, un échec attendu sera signalé.

Si un QVERIFY() ou un QCOMPARE() est marqué comme un échec attendu, mais qu'il réussit, une réussite inattendue (XPASS) est écrite dans le journal des tests et sera comptée comme un échec du test.

Le paramètre dataIndex indique 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 pas de données de test.

comment sera ajouté au journal du test pour l'échec attendu.

mode est un QTest::TestFailMode et indique si le test doit continuer à s'exécuter ou non. Le mode est appliqué indépendamment du fait que l'échec attendu du test se produise ou non.

Remarque : cette macro ne peut être utilisée que dans une fonction de test invoquée par le cadre 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 écrit dans la sortie du test si la variable i n'est pas 42. Si la variable i est 42, un succès inattendu est écrit à la place. La commande 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 continuera pas à s'exécuter 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 peut être utilisée pour forcer l'échec d'un test. Le test s'arrête de s'exécuter et l'échec message est ajouté au journal du test.

Remarque : cette macro ne peut être utilisée que dans une fonction de test invoquée par le cadre 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 une variable locale nommée name avec le type type sur la pile. Les variables name et type doivent correspondre à une colonne de la table de données du test. Cette condition est affirmée et le test s'interrompt si l'affirmation échoue.

Supposons qu'un test possède les 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 du test comportent deux éléments, un QString appelé aString et un entier appelé expected. Pour récupérer ces valeurs dans le test réel :

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

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

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

Remarque : cette macro ne peut être utilisée que dans une fonction de test invoquée par le cadre de test. La fonction de test doit avoir une fonction _data.

QFETCH_GLOBAL(type, name)

Cette macro récupère une variable nommée name avec le type type à partir d'une ligne du tableau de données globales. Les variables name et type doivent correspondre à une colonne du tableau de données global. Cette condition est affirmée et le test s'interrompt si l'affirmation é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 sont 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 de locale de la seconde et de nombre de la première. Ainsi, avec quatre lignes dans le tableau global et trois dans le tableau local, 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 du tableau de données global à l'aide de QFETCH_GLOBAL(), et le nombre est lu à partir du tableau de données local à l'aide de QFETCH().

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

QFINDTESTDATA(filename)

Renvoie une adresse QString pour le fichier de données de test auquel se réfère filename, ou une adresse QString vide si le fichier de données de test n'a pas pu être trouvé.

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

Le chemin retourné sera le premier chemin de la liste suivante qui se résout en un fichier ou un répertoire existant :

Si le fichier/répertoire nommé n'existe pas à l'un de ces emplacements, un avertissement est imprimé dans le journal du test.

Par exemple, dans ce code :

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

Le fichier testdata sera résolu comme le premier fichier existant à partir de :

  • /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 indépendamment du fait que le test ait été installé ou non, et indépendamment du fait que l'arbre de construction du test soit égal à l'arbre des sources du test.

Note : la détection fiable des données de test à partir du répertoire source nécessite soit que qmake soit utilisé, soit que la macro QT_TESTCASE_BUILDDIR soit définie pour pointer vers le répertoire de travail à partir duquel le compilateur est invoqué, soit que seuls les chemins absolus vers les fichiers source soient transmis au compilateur. 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 que le module QtTest est lié à la cible. Vous pouvez changer la valeur par défaut de QT_TESTCASE_BUILDDIR en définissant la propriété QT_TESTCASE_BUILDDIR sur la cible.

Note : Pour les tests qui utilisent la macro QTEST_APPLESS_MAIN() pour générer une fonction main(), QFINDTESTDATA ne tentera pas de trouver les données de test relatives à QCoreApplication::applicationDirPath(). En pratique, cela signifie que les tests utilisant QTEST_APPLESS_MAIN() ne trouveront pas leurs données de test s'ils sont exécutés à partir d'un arbre de compilation parallèle.

QSKIP(description)

Si elle est appelée à partir d'une fonction de test, la macro QSKIP() arrête l'exécution du test sans ajouter d'échec au journal des tests. Vous pouvez l'utiliser pour sauter des 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 nécessaires ne sont pas installées sur le système de test.

Le texte description est ajouté au journal du test et doit contenir une explication de la raison pour laquelle 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, de sorte qu'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 à partir d'une fonction _data, la macro QSKIP() arrêtera l'exécution de la fonction _data et empêchera l'exécution de la fonction de test associée. Cela permet d'omettre complètement un test basé sur des données. Pour omettre des lignes individuelles, rendez-les conditionnelles en utilisant un simple if (condition) newRow(...) << ... dans la fonction _data, au lieu d'utiliser QSKIP() dans la fonction de test.

Si elle est appelée à partir de initTestCase_data(), la macro QSKIP() ignorera toutes les fonctions test et _data. Si elle est appelée à partir de initTestCase() alors qu'il n'y a pas de initTestCase_data() ou qu'elle ne met en place qu'une seule ligne, la macro QSKIP() sautera également l'ensemble du test. Cependant, si initTestCase_data() contient plus d'une ligne, alors initTestCase() est appelé (suivi de chaque test et enfin du récapitulatif) une fois par ligne. Par conséquent, un appel à QSKIP() dans initTestCase() sautera simplement toutes les fonctions de test pour la ligne actuelle de données globales, définie par initTestCase_data().

Remarque : cette macro ne peut être utilisée que dans une fonction de test ou une fonction _data invoquée par le cadre de test.

Exemple :

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

Si un test expose un bogue connu qui ne sera pas corrigé immédiatement, utilisez la macro QEXPECT_FAIL() pour documenter l'échec et référencer l'identifiant de suivi de bogue pour le 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 compté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 XPASS (réussite inattendue) sera signalé dans la sortie du test et sera compté comme un échec du test.

Pour les bogues connus, QEXPECT_FAIL() est préférable à QSKIP() parce qu'un développeur ne peut pas corriger le bogue sans qu'un résultat XPASS ne lui rappelle que le test doit également être mis à jour. Si QSKIP() est utilisé, il n'y a pas de 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 Select Appropriate Mechanisms to Exclude Tests.

QTEST(actual, testElement)

QTEST() est une macro de commodité pour QCOMPARE() qui compare la valeur actual avec l'élément testElement des données du test. S'il n'y a pas d'élément de ce type, le test affirme.

À 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 aussi QCOMPARE().

QTEST_APPLESS_MAIN(TestClass)

Implémente une fonction main() qui exécute tous les tests dans 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 utilisateur graphique.

Voir aussi QTEST_MAIN().

QTEST_GUILESS_MAIN(TestClass)

Implémente une fonction main() qui instancie un objet QCoreApplication et l'objet TestClass, et exécute tous les tests dans l'ordre où ils ont été définis. Utilisez cette macro pour construire 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 scénario de test n'a pas besoin des fonctionnalités offertes par QApplication, mais que la boucle d'événements est toujours nécessaire.

Voir aussi QTEST_MAIN().

QTEST_MAIN(TestClass)

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

Si QT_WIDGETS_LIB est défini, l'objet application sera QApplication, si QT_GUI_LIB est défini, l'objet application sera QGuiApplication, sinon ce sera 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.

Remarque : sur les plates-formes où la navigation au clavier est activée par défaut, cette macro la désactivera de force si QT_WIDGETS_LIB est défini. Ceci est fait pour simplifier l'utilisation des événements clés lors de l'écriture de tests automatiques. Si vous souhaitez écrire un scénario de test qui utilise la navigation au clavier, vous devez l'activer dans les fonctions initTestCase() ou init() de votre scénario de test en appelant QApplication::setNavigationMode().

Exemple :

QTEST_MAIN(TestQString)

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

[since 6.8] QTEST_THROW_ON_FAIL

Lorsqu'ils sont définis, QCOMPARE()/QVERIFY() etc. sont toujours lancés en cas d'échec. QTest::setThrowOnFail() n'a alors plus d'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 déclaration incluant return;, et ne peut donc pas être utilisé 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 (en utilisant QTest::setThrowOnFail(true)). Avec cette macro définie, QCOMPARE() s'étend à la place à une déclaration sans return;, qui est utilisable à partir de n'importe quelle fonction.

Cette macro a été introduite dans Qt 6.8.

[since 6.8] QTEST_THROW_ON_SKIP

Lorsqu'il est défini, QSKIP() lance toujours. 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 pasvoid. Si cette macro n'est pas définie, QSKIP(), par exemple, se développe en une déclaration incluant return;, et ne peut donc pas être utilisé 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 (en utilisant QTest::setThrowOnSkip(true)). Avec cette macro définie, QSKIP() s'étend à la place à une déclaration sans return;, qui est utilisable à partir de n'importe quelle fonction.

Cette macro a été introduite dans Qt 6.8.

QTRY_COMPARE(actual, expected)

Effectue une comparaison des valeurs actual et expected en invoquant QTRY_COMPARE_WITH_TIMEOUT() avec un délai d'attente de cinq secondes.

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

Voir aussi QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() et QEXPECT_FAIL().

[since 6.4] QTRY_COMPARE_EQ(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_EQ_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_EQ() et QTRY_COMPARE_EQ().

[since 6.4] QTRY_COMPARE_GE(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_GE_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_GE() et QTRY_COMPARE_GE().

[since 6.4] QTRY_COMPARE_GT(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_GT_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_GT() et QTRY_COMPARE_GT().

[since 6.4] QTRY_COMPARE_LE(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_LE_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_LE() et QTRY_COMPARE_LE().

[since 6.4] QTRY_COMPARE_LT(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_LT_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_LT() et QTRY_COMPARE_LT().

[since 6.4] QTRY_COMPARE_NE(computed, baseline)

Effectue la comparaison des valeurs computed et baseline en invoquant QTRY_COMPARE_NE_WITH_TIMEOUT avec un délai d'attente de cinq secondes.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi 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 elle effectue la comparaison des valeurs computed et baseline de manière répétée, jusqu'à ce que la comparaison renvoie true ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Cette macro a été introduite dans Qt 6.4.

Voir aussi QCOMPARE_NE() et QTRY_COMPARE_NE().

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

La macro QTRY_COMPARE_WITH_TIMEOUT() est similaire à QCOMPARE(), mais elle compare les valeurs actual et expected à plusieurs reprises, jusqu'à ce que les deux valeurs soient égales ou que la valeur timeout (en millisecondes) soit atteinte. Entre chaque comparaison, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

Voir aussi QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() et QEXPECT_FAIL().

QTRY_VERIFY2(condition, message)

Vérifie condition en invoquant QTRY_VERIFY2_WITH_TIMEOUT() avec un délai d'attente de cinq secondes. Si condition est toujours faux, message est affiché. L'adresse message est une chaîne de caractères en C.

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 invoquée par le cadre de test.

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

QTRY_VERIFY(condition)

Vérifie le site condition en invoquant QTRY_VERIFY_WITH_TIMEOUT() avec un délai d'attente de cinq secondes.

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

Voir aussi 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 émet un message verbeux message lorsque condition est toujours faux après la durée spécifiée timeout (en millisecondes). L'adresse message est une chaîne de caractères en C.

Depuis Qt 6.8, le timeout peut également être un littéralstd::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 invoquée par le cadre de test.

Voir aussi 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 à QVERIFY(), mais vérifie l'adresse condition à plusieurs reprises, jusqu'à ce que la condition devienne vraie ou que l'adresse timeout (en millisecondes) soit atteinte. Entre chaque évaluation, des événements sont traités. Si le délai d'attente est atteint, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Depuis Qt 6.8, le timeout peut également être un littéralstd::chrono tel que 2s.

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

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

QVERIFY2(condition, message)

La macro QVERIFY2() se comporte exactement comme QVERIFY(), sauf qu'elle signale un message lorsque condition est faux. Le message est une chaîne de caractères en C.

Le message peut également être obtenu à partir d'un appel de fonction qui produit une chaîne C simple, comme qPrintable() appliqué à un QString, qui peut être construit de n'importe quelle manière habituelle, 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 avez un objet fichier et que vous testez sa fonction open(), vous pouvez écrire un test avec une instruction comme :

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

Si ce test échoue, il ne donnera aucun indice sur la raison pour laquelle le fichier n'a pas pu être ouvert :

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

S'il existe un message d'erreur plus informatif que vous pourriez construire à partir des valeurs testées, vous pouvez utiliser QVERIFY2() pour transmettre ce message avec votre condition de test, afin de fournir un message plus informatif 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 Qt CI, le message d'échec détaillé ci-dessus sera inséré dans le résumé posté dans le système de revue de code :

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

Voir aussi 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'adresse condition est vraie ou non. Si c'est le cas, l'exécution se poursuit. Dans le cas contraire, un échec est enregistré dans le journal des tests et le test ne sera plus exécuté.

Vous pouvez utiliser QVERIFY2() lorsqu'il est pratique et utile d'ajouter des informations supplémentaires dans le rapport d'échec du test.

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

Par exemple, le code suivant montre que cette macro est utilisée pour vérifier qu'un objet QSignalSpy est valide :

QVERIFY(spy.isValid());

Pour plus d'informations sur l'échec, utilisez QCOMPARE(x, y) au lieu de QVERIFY(x == y), car cette macro indique à la fois la valeur attendue et la valeur réelle lorsque la comparaison échoue.

Voir aussi 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 donnée dans l'argument variadique et s'attend à attraper une exception lancée par l'expression.

Plusieurs résultats sont possibles :

  • Si l'expression génère une exception identique à exceptiontype ou dérivée de exceptiontype, l'exécution se poursuit.
  • Dans le cas contraire, si l'expression ne lève aucune exception, ou si l'exception levée dérive de std::exception, un échec sera enregistré dans le journal de test et la macro retournera prématurément (à partir de la fonction englobante).
  • Si l'exception levée ne provient ni de std::exception ni de exceptiontype, un échec sera enregistré dans le journal des tests et l'exception sera levée à nouveau. Cela permet d'éviter les problèmes liés, par exemple, aux exceptions d'annulation de pthread.

La macro utilise des arguments variables, de sorte que l'expression peut 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 invoquée par le cadre 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 donnée dans son argument variadique et tente d'attraper toute exception lancée par l'expression.

Il existe plusieurs résultats différents :

  • 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 capturée, un échec est enregistré dans le journal des tests et la macro retourne prématurément (retour implicite de la fonction englobante).
  • Si une exception non dérivée de std::exception est détectée, un échec sera enregistré dans le journal des tests et l'exception sera relancée. Cela permet d'éviter les problèmes liés, par exemple, aux exceptions d'annulation de pthread.

La macro utilise des arguments variables, de sorte que l'expression peut 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 invoquée par le cadre 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.