Spec-Zone.ru › Qt

Пространство имён QTest

Пространство имён QTest содержит все функции и объявления, связанные с Qt Test. Подробнее...

Заголовок: #include <QTest>
CMake: find_package(Qt6 COMPONENTS Test REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib
  • Устаревшие члены

Классы

класс QTouchEventSequence

Типы

перечисление KeyAction { Press, Release, Click, Shortcut }
перечисление MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove }
перечисление QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults }
перечисление TestFailMode { Abort, Continue }

Функции

void addColumn(const char *name, T *dummy = 0)
QTestData & addRow(const char *format, ...)
const char * benchmarkMetricName(QTest::QBenchmarkMetric metric)
const char * benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
QPointingDevice * createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)
const char * currentAppName()
const char * currentDataTag()
bool currentTestFailed()
const char * currentTestFunction()
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(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 keyClick(QWidget *widget, 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, QWindow *window, 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, QWidget *widget, 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(QWindow *window, 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(QWidget *widget, 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(QWindow *window, 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(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keySequence(QWindow *window, const QKeySequence &keySequence)
void keySequence(QWidget *widget, 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)
void qSleep(int ms)
void qWait(int ms)
bool qWaitFor(Functor predicate, int timeout = 5000)
bool qWaitForWindowActive(QWindow *window, int timeout = 5000)
bool qWaitForWindowActive(QWidget *widget, int timeout = 5000)
bool qWaitForWindowExposed(QWindow *window, int timeout = 5000)
bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
void setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric)
char * toHexRepresentation(const char *ba, int length)
char * toString(const QStringView &string)
char * toString(const T &value)
char * toString(const QPair<T1, T2> &pair)
char * toString(const QVector2D &v)
char * toString(const QVector3D &v)
char * toString(const QVector4D &v)
char * toString(QSizePolicy::Policy p)
char * toString(QSizePolicy::ControlTypes cts)
char * toString(QSizePolicy::ControlType ct)
char * toString(QSizePolicy sp)
char * toString(const std::pair<T1, T2> &pair)
char * toString(const std::tuple<Types...> &tuple)
char * toString(const QString &string)
char * toString(const QLatin1String &string)
char * toString(const QByteArray &ba)
char * toString(const QTime &time)
char * toString(const QDate &date)
char * toString(const QDateTime &dateTime)
char * toString(const QCborError &c)
char * toString(const QChar &character)
char * toString(const QPoint &point)
char * toString(const QSize &size)
char * toString(const QRect &rectangle)
char * toString(const QPointF &point)
char * toString(const QSizeF &size)
char * toString(const QRectF &rectangle)
char * toString(const QUrl &url)
char * toString(const QUuid &uuid)
char * toString(const QVariant &variant)
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)

Макросы

QBENCHMARK
QBENCHMARK_ONCE
QCOMPARE(actual, expected)
QEXPECT_FAIL(dataIndex, comment, mode)
QFAIL(message)
QFETCH(type, name)
QFETCH_GLOBAL(type, name)
QFINDTESTDATA(filename)
QSKIP(description)
QTEST(actual, testElement)
QTEST_APPLESS_MAIN(TestClass)
QTEST_GUILESS_MAIN(TestClass)
QTEST_MAIN(TestClass)
QTRY_COMPARE(actual, expected)
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
QTRY_VERIFY2(condition, message)
QTRY_VERIFY(condition)
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)
QVERIFY2(condition, message)
QVERIFY(condition)
QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)

Подробное описание

См. Обзор Qt Test для получения информации о том, как писать unit-тесты.

Классы

class QTouchEventSequence

Класс QTouchEventSequence используется для моделирования последовательности событий касания. Подробнее...

Документация типов

Перечисление QTest::KeyAction

Это перечисление описывает возможные действия для обработки нажатий клавиш.

Постоянная Значение Описание
QTest::Press 0 Клавиша нажата.
QTest::Release 1 Клавиша отпущена.
QTest::Click 2 Клавиша нажата и отпущена (клика).
QTest::Shortcut 3 Активная комбинация клавиш. Это значение добавлено в Qt 5.6.

Перечисление QTest::MouseAction

Это перечисление описывает возможные действия для обработки мыши.

Постоянная Значение Описание
QTest::MousePress 0 Нажата кнопка мыши.
QTest::MouseRelease 1 Кнопка мыши отпущена.
QTest::MouseClick 2 Кнопка мыши нажата и отпущена (клика).
QTest::MouseDClick 3 Кнопка мыши дважды нажата и отпущена (двойной клик).
QTest::MouseMove 4 Указатель мыши перемещён.

Перечисление QTest::QBenchmarkMetric

Это перечисление перечисляет все, что можно измерить.

Постоянная Значение Описание
QTest::FramesPerSecond 0 Кадров в секунду
QTest::BitsPerSecond 1 Битов в секунду
QTest::BytesPerSecond 2 Байтов в секунду
QTest::WalltimeMilliseconds 3 Время по часам в миллисекундах
QTest::WalltimeNanoseconds 7 Время по часам в наносекундах
QTest::BytesAllocated 8 Использование памяти в байтах
QTest::Events 6 Количество событий
QTest::CPUTicks 4 Время работы процессора
QTest::CPUMigrations 9 Миграции процессов между процессорами
QTest::CPUCycles 10 Такты процессора
QTest::RefCPUCycles 30 Ссылочные такты процессора
QTest::BusCycles 11 Такты шины
QTest::StalledCycles 12 Заблокированные такты
QTest::InstructionReads 5 Чтение инструкций
QTest::Instructions 13 Выполненные инструкции
QTest::BranchInstructions 14 Инструкции типа ветвления
QTest::BranchMisses 15 Инструкции ветвления, которые были неправильно предсказаны
QTest::CacheReferences 16 Обращения к кешу любого типа
QTest::CacheMisses 20 Промахи кеша любого типа
QTest::CacheReads 17 Чтения/загрузки из кеша
QTest::CacheReadMisses 21 Промахи чтения/загрузки из кеша
QTest::CacheWrites 18 Записи/сохранения в кеш
QTest::CacheWriteMisses 22 Промахи записи/сохранения в кеш
QTest::CachePrefetches 19 Предзагрузки из кеша
QTest::CachePrefetchMisses 23 Промахи предзагрузки из кеша
QTest::ContextSwitches 24 Переключения контекста
QTest::PageFaults 25 Страницы с ошибками любого типа
QTest::MinorPageFaults 26 Незначительные ошибки страниц
QTest::MajorPageFaults 27 Серьезные ошибки страниц
QTest::AlignmentFaults 28 Ошибки, вызванные неправильным выравниванием
QTest::EmulationFaults 29 Ошибки, потребовавшие эмуляции программного обеспечения

Обратите внимание, что WalltimeNanoseconds и BytesAllocated предоставляются только для использования через setBenchmarkResult(), и результаты по этим метрикам не могут быть автоматически предоставлены фреймворком QTest.

См. также QTest::benchmarkMetricName() и QTest::benchmarkMetricUnit().

перечисление QTest::TestFailMode

Это перечисление описывает режимы обработки ожидаемой ошибки в макросах QVERIFY() или QCOMPARE().

Постоянная Значение Описание
QTest::Abort 1 Прерывает выполнение теста. Используйте этот режим, когда нет смысла продолжать выполнение теста после ожидаемой ошибки.
QTest::Continue 2 Продолжает выполнение теста после ожидаемой ошибки.

См. также QEXPECT_FAIL().

Документация функций

шаблон <typename T> void QTest::addColumn(const char *name, T *dummy = 0)

Добавляет столбец типа T в текущие данные теста. name — имя столбца. dummy — обходной путь для проблемных компиляторов и может быть проигнорирован.

Для заполнения столбца значениями можно использовать newRow(). Используйте QFETCH() для извлечения данных в реальном тесте.

Пример:

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

Для добавления пользовательских типов в тестовые данные, тип должен быть зарегистрирован в QMetaType через Q_DECLARE_METATYPE().

Примечание: Этот макрос может быть использован только в функции данных теста, которая вызывается фреймворком теста.

См. Тестирование с данными для более подробного примера.

См. также QTest::newRow(), QFETCH() и QMetaType.

[since 5.9] QTestData &QTest::addRow(const char *format, ...)

Добавляет новую строку в текущие данные теста. Аргументы функции передаются в qsnprintf() для форматирования в соответствии с format. См. документацию по qvsnprintf() для замечаний и ограничений.

Отформатированная строка будет отображаться как имя этих тестовых данных в выходных данных теста.

Возвращает ссылку QTestData, которая может использоваться для потокового ввода данных.

Пример:

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

Примечание: Эта функция может быть использована только в функции данных теста, которая вызывается фреймворком теста.

См. Тестирование с данными для более подробного примера.

Эта функция была добавлена в Qt 5.9.

См. также addColumn() и QFETCH().

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

Возвращает значение перечисления metric в виде строкового представления.

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

Возвращает единицы измерения для указанной метрики metric.

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

Создает виртуальное сенсорное устройство типа devType с возможностями caps для имитации событий касания.

Устройство будет зарегистрировано в системе окон QPA и будет удалено автоматически при удалении QCoreApplication. Поэтому для использования рекомендуется использовать createTouchDevice() для инициализации члена QPointingDevice в классе вашего тестового случая и использовать тот же экземпляр для всех тестов.

Эта функция была добавлена в Qt 5.8.

См. также QTest::QTouchEventSequence и touchEvent().

const char *QTest::currentAppName()

Возвращает имя выполняемого в настоящее время бинарного файла.

const char *QTest::currentDataTag()

Возвращает имя текущих данных теста. Если тесту не назначены данные теста, функция возвращает 0.

bool QTest::currentTestFailed()

Возвращает true, если текущая функция теста завершилась с ошибкой, иначе false.

const char *QTest::currentTestFunction()

Возвращает имя функции теста, которая выполняется в настоящее время.

Пример:

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

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

Игнорирует сообщения, созданные с помощью qDebug(), qInfo() или qWarning(). Если сообщение с соответствующим type выводится, оно будет удалено из журнала тестирования. Если тест завершился, а сообщение не было выведено, в журнал тестирования будет добавлена ошибка теста.

Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое вы хотите проигнорировать, выводится дважды, необходимо вызвать ignoreMessage() дважды.

Пример:

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

В примере выше проверяется, что QDir::mkdir() выводит правильное предупреждение при вызове с недопустимым именем файла.

[since 5.3] void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)

Это перегруженная функция.

Игнорирует сообщения, созданные с помощью qDebug(), qInfo() или qWarning(). Если выводится сообщение, соответствующее messagePattern и соответствующему type, оно будет удалено из журнала тестирования. Если тест завершился, а сообщение не было выведено, в журнал тестирования будет добавлена ошибка теста.

Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое вы хотите проигнорировать, выводится дважды, необходимо вызвать ignoreMessage() дважды.

Эта функция была добавлена в Qt 5.3.

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

Эмулирует нажатие клавиши key с необязательными modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Примеры:

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

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

Первый пример выше эмулирует нажатие клавиши escape на myWidget без модификаторов и без задержки. Второй пример эмулирует нажатие shift-escape на myWidget после задержки теста в 200 мс.

См. также QTest::keyClicks().

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

Это перегруженная функция.

Эмулирует нажатие клавиши key с необязательными modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Примеры:

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

Первый пример выше эмулирует нажатие клавиши escape на myWindow без модификаторов и без задержки. Второй пример эмулирует нажатие shift-escape на myWindow после задержки теста в 200 мс.

Эта функция была добавлена в Qt 5.0.

См. также QTest::keyClicks().

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

Это перегруженная функция.

Эмулирует нажатие клавиши key с необязательными modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Пример:

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

В примере выше эмулируется нажатие a на myWindow без модификаторов и без задержки теста.

Эта функция была добавлена в Qt 5.0.

См. также QTest::keyClicks().

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

Это перегруженная функция.

Эмулирует нажатие клавиши key с необязательными modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Пример:

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

В примере выше эмулируется нажатие a на myWidget без модификаторов и без задержки теста.

См. также QTest::keyClicks().

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

Эмулирует нажатие последовательности клавиш sequence на widget. Необязательно можно указать модификатор и задержку (в миллисекундах) теста перед каждым нажатием клавиши.

Пример:

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

В примере выше эмулируется нажатие последовательности клавиш, представляющих «hello world», на myWidget без модификаторов и без задержки теста.

См. также QTest::keyClick().

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

Отправляет событие Qt для клавиши key на widget с заданным action. Необязательно можно указать модификатор и задержку (в миллисекундах) теста перед отправкой события.

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

Это перегруженная функция.

Отправляет событие Qt для клавиши ascii на window с заданным action. Необязательно можно указать модификатор и задержку (в миллисекундах) теста перед отправкой события.

Эта функция была добавлена в Qt 5.0.

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

Это перегруженная функция.

Отправляет событие Qt для клавиши key на window с заданным action. Необязательно можно указать модификатор и задержку (в миллисекундах) теста перед отправкой события.

Эта функция была добавлена в Qt 5.0.

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

Это перегруженная функция.

Отправляет событие Qt для клавиши ascii на widget с заданным action. Необязательно можно указать модификатор и задержку (в миллисекундах) теста перед отправкой события.

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

Эмулирует нажатие клавиши key с необязательными modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Примечание: В какой-то момент необходимо отпустить клавишу с помощью keyRelease().

См. также QTest::keyRelease() и QTest::keyClick().

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

Это перегруженная функция.

Эмулирует нажатие клавиши key с необязательными modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.

Примечание: В какой-то момент необходимо отпустить клавишу с помощью keyRelease().

Эта функция была добавлена в Qt 5.0.

См. также QTest::keyRelease() и QTest::keyClick().

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

Это перегруженный метод.

Имитирует нажатие клавиши key с необязательным модификатором modifier на window. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.

Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().

Этот метод был представлен в Qt 5.0.

См. также QTest::keyRelease() и QTest::keyClick().

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

Это перегруженный метод.

Имитирует нажатие клавиши key с необязательным модификатором modifier на widget. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.

Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().

См. также QTest::keyRelease() и QTest::keyClick().

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

Имитирует отпускание клавиши key с необязательным модификатором modifier на widget. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.

См. также QTest::keyPress() и QTest::keyClick().

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

Это перегруженный метод.

Имитирует отпускание клавиши key с необязательным модификатором modifier на window. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.

Этот метод был представлен в Qt 5.0.

См. также QTest::keyClick().

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

Это перегруженный метод.

Имитирует отпускание клавиши key с необязательным модификатором modifier на window. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.

Этот метод был представлен в Qt 5.0.

См. также QTest::keyPress() и QTest::keyClick().

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

Это перегруженный метод.

Имитирует отпускание клавиши key с необязательным модификатором modifier на widget. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.

См. также QTest::keyClick().

[since 5.10] void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)

Это перегруженный метод.

Имитирует ввод keySequence в window.

Этот метод был представлен в Qt 5.10.

См. также QTest::keyClick() и QTest::keyClicks().

[since 5.10] void QTest::keySequence(QWidget *widget, const QKeySequence &keySequence)

Это перегруженный метод.

Имитирует ввод keySequence в widget.

Этот метод был представлен в Qt 5.10.

См. также QTest::keyClick() и QTest::keyClicks().

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

Имитирует нажатие кнопки мыши button с необязательным модификатором modifier на widget. Позиция щелчка определяется pos; по умолчанию это центр widget. Если задано delay, тест подождет указанное количество миллисекунд перед нажатием и отпусканием кнопки.

См. также QTest::mousePress() и QTest::mouseRelease().

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

Это перегруженный метод.

Имитирует нажатие кнопки мыши button с необязательным модификатором stateKey на window. Позиция щелчка определяется pos; по умолчанию это центр window. Если задано delay, тест подождет указанное количество миллисекунд перед нажатием и отпусканием кнопки.

Этот метод был представлен в Qt 5.0.

См. также QTest::mousePress() и QTest::mouseRelease().

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

Имитирует двойной щелчок кнопкой мыши button с необязательным модификатором modifier на widget. Позиция щелчка определяется pos; по умолчанию это центр widget. Если задано delay, тест подождет указанное количество миллисекунд перед каждым нажатием и отпусканием.

См. также QTest::mouseClick().

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

Это перегруженный метод.

Имитирует двойной щелчок кнопкой мыши button с необязательным модификатором stateKey на window. Позиция щелчка определяется pos; по умолчанию это центр window. Если задано delay, тест подождет указанное количество миллисекунд перед каждым нажатием и отпусканием.

Этот метод был представлен в Qt 5.0.

См. также QTest::mouseClick().

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

Перемещает указатель мыши на widget. Если pos не указан, указатель мыши перемещается в центр widget. Если задано delay (в миллисекундах), тест подождет перед перемещением указателя мыши.

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

Это перегруженный метод.

Перемещает указатель мыши на window. Если pos не указан, указатель мыши перемещается в центр window. Если задано delay (в миллисекундах), тест подождет перед перемещением указателя мыши.

Этот метод был представлен в Qt 5.0.

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

Имитирует нажатие кнопки мыши button с необязательными modifier на widget. Позиция определяется pos; по умолчанию - центр виджета. Если указан delay, тест будет ожидать заданное количество миллисекунд перед нажатием.

См. также QTest::mouseRelease() и QTest::mouseClick().

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

Это перегруженный метод.

Имитирует нажатие кнопки мыши button с необязательным модификатором stateKey на window. Позиция определяется pos; по умолчанию - центр окна. Если указан delay, тест будет ожидать заданное количество миллисекунд перед нажатием.

Этот метод был представлен в Qt 5.0.

См. также QTest::mouseRelease() и QTest::mouseClick().

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

Имитирует отпускание кнопки мыши button с необязательными modifier на widget. Позиция отпускания определяется pos; по умолчанию - центр виджета. Если указан delay, тест будет ожидать заданное количество миллисекунд перед отпусканием кнопки.

См. также QTest::mousePress() и QTest::mouseClick().

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

Это перегруженный метод.

Имитирует отпускание кнопки мыши button с необязательным модификатором stateKey на window. Позиция отпускания определяется pos; по умолчанию - центр окна. Если указан delay, тест будет ожидать заданное количество миллисекунд перед отпусканием кнопки.

Этот метод был представлен в Qt 5.0.

См. также QTest::mousePress() и QTest::mouseClick().

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

Добавляет новую строку в текущие данные теста. dataTag — имя тестовых данных, которое будет отображаться в выводе теста. Возвращает ссылку на QTestData, которую можно использовать для ввода данных.

Пример:

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

Примечание: Этот макрос можно использовать только в функции данных теста, которая вызывается тестовой средой.

См. Тестирование с использованием данных для более подробного примера.

См. также addColumn() и QFETCH().

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

Выполняет тесты, объявленные в testObject. Кроме того, приватные слоты initTestCase(), cleanupTestCase(), init() и cleanup() будут выполнены, если они существуют. Подробнее см. Создание теста.

Необязательно, можно предоставить аргументы командной строки argc и argv. Список распознаваемых аргументов см. в Аргументы командной строки Qt Test.

Следующий пример запустит все тесты в MyTestObject:

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

Функция возвращает 0, если тесты не завершились сбоем, или значение отличное от 0, если один или несколько тестов завершились сбоем или в случае возникновения необработанных исключений. (Пропущенные тесты не влияют на возвращаемое значение.)

Для автономных тестовых приложений можно использовать удобный макрос QTEST_MAIN(), чтобы объявить функцию main(), которая анализирует аргументы командной строки и выполняет тесты, избегая необходимости явного вызова этой функции.

Значение, возвращаемое этой функцией, также является кодом завершения тестового приложения при использовании макроса QTEST_MAIN().

Для автономных тестовых приложений данная функция не должна вызываться более одного раза, так как параметры командной строки для ведения журнала вывода тестов в файлы и выполнения отдельных функций тестов не будут работать корректно.

Примечание: Эта функция не реентерабельна, только один тест может выполняться за раз. Тест, который был запущен с помощью qExec(), не может запустить другой тест через qExec(), а потоки не могут вызывать qExec() одновременно.

Если вы программно создали аргументы, а не получили их из аргументов в main(), вероятно, вам будет полезно использовать QTest::qExec(QObject *, const QStringList &), поскольку она безопасна для Юникода.

См. также QTEST_MAIN().

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

Это перегруженный метод.

Ведёт себя идентично qExec(QObject *, int, char**), но принимает QStringList аргументов arguments вместо char** списка.

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

Извлекает директорию из ресурсов на диск. Содержимое извлекается рекурсивно в временную папку. Извлечённое содержимое удаляется автоматически, когда ссылка на возвращаемое значение выходит за пределы области видимости.

dirName — имя директории для извлечения из ресурсов.

Возвращает временную директорию, куда были извлечены данные, или null в случае ошибок.

void QTest::qSleep(int ms)

Засыпает на ms миллисекунд, блокируя выполнение теста. qSleep() не будет обрабатывать события и сделает ваш тест невосприимчивым. Сеть может выйти из строя во время сна. Используйте QTest::qWait() для неблокирующего сна.

ms должно быть больше 0.

Примечание: Функция qSleep() вызывает либо nanosleep() в Unix, либо Sleep() в Windows, поэтому точность времени, потраченного в qSleep(), зависит от операционной системы.

Пример:

QTest::qSleep(250);

См. также QTest::qWait().

void QTest::qWait(int ms)

Ожидает ms миллисекунд. Во время ожидания события будут обрабатываться, и ваш тест останется отзывчивым к событиям пользовательского интерфейса или сетевому взаимодействию.

Пример:

    int i = 0;
    while (myNetworkServerNotResponding() && i++ < 50)
        QTest::qWait(250);

Приведённый выше код будет ждать, пока сетевой сервер не ответит в течение максимум примерно 12,5 секунд.

См. также QTest::qSleep() и QSignalSpy::wait().

[since 5.10] template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout = 5000)

Ожидает timeout миллисекунд или до тех пор, пока predicate не вернёт true.

Возвращает true если predicate вернуло true в какой-то момент, в противном случае возвращает false.

Пример:

    MyObject obj;
    obj.startup();
    QTest::qWaitFor([&]() {
        return obj.isReady();
    }, 3000);

Приведённый выше код будет ждать, пока объект не станет готовым, в течение максимум трёх секунд.

Этот метод был представлен в Qt 5.10.

[since 5.0] bool QTest::qWaitForWindowActive(QWindow *window, int timeout = 5000)

Ожидает timeout миллисекунд или пока окно window не станет активным.

Возвращает true если window активен в течение timeout миллисекунд, в противном случае возвращает false.

Этот метод был представлен в Qt 5.0.

См. также qWaitForWindowExposed() и QWindow::isActive().

[since 5.0] bool QTest::qWaitForWindowActive(QWidget *widget, int timeout = 5000)

Ожидает timeout миллисекунд или пока окно виджета widget не станет активным.

Возвращает true если окно widget активен в течение timeout миллисекунд, в противном случае возвращает false.

Этот метод был представлен в Qt 5.0.

См. также qWaitForWindowExposed() и QWidget::isActiveWindow().

[since 5.0] bool QTest::qWaitForWindowExposed(QWindow *window, int timeout = 5000)

Ожидает в течение timeout миллисекунд или пока window не будет отображён. Возвращает true если window отображён в течение timeout миллисекунд, в противном случае возвращает false.

Это полезно в основном для асинхронных систем, таких как X11, где окно будет отображено на экране некоторое время после запроса отображения.

Обратите внимание, что окно, которое отображено на экране, всё ещё может считаться неотображённым, если область клиента окна полностью закрыта другими окнами или если окно по другим причинам невидимо. В этом случае функция ожидания закончится таймаутом.

Эта функция была введена в Qt 5.0.

См. также qWaitForWindowActive() и QWindow::isExposed().

[since 5.0] bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)

Ожидает в течение timeout миллисекунд или пока окно widget не будет отображено. Возвращает true если окно widget отображено в течение timeout миллисекунд, в противном случае возвращает false.

Это полезно в основном для асинхронных систем, таких как X11, где окно будет отображено на экране некоторое время после запроса отображения.

Обратите внимание, что окно, которое отображено на экране, всё ещё может считаться неотображённым, если область клиента окна полностью закрыта другими окнами или если окно по другим причинам невидимо. Эта функция завершится таймаутом при ожидании такого окна.

Конкретная конфигурация, в которой это происходит, возникает при использовании QGLWidget в качестве виджета области просмотра на macOS: виджет области просмотра получает событие expose, а не родительский виджет.

Эта функция была введена в Qt 5.0.

См. также qWaitForWindowActive().

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

Устанавливает результат эталонного измерения для этой тестовой функции в result.

Используйте эту функцию, если хотите сообщить результаты эталонного измерения без использования макроса QBENCHMARK. Используйте metric, чтобы указать, как Qt Test должен интерпретировать результаты.

Контекстом для результата будет имя тестовой функции и любой тег данных из функции _data. Эту функцию можно вызвать только один раз в каждой тестовой функции, последующие вызовы заменят ранее полученные результаты.

Обратите внимание, что аргумент командной строки -iterations не влияет на тестовые функции без макроса QBENCHMARK.

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

Возвращает указатель на строку, являющуюся строкой ba, представленной как последовательность шестнадцатеричных символов, разделённых пробелами. Если входная строка считается слишком длинной, она усекается. Усечение обозначается в возвращаемой строке многоточием в конце. Вызывающий код владеет возвращенным указателем и должен гарантировать, что он позже передается оператору delete[].

length — длина строки ba.

[since 5.11] char *QTest::toString(const QStringView &string)

Это перегруженная функция.

Возвращает текстовое представление заданной строки string.

Эта функция была введена в Qt 5.11.

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

Возвращает текстовое представление value. Эта функция используется функцией QCOMPARE() для вывода подробной информации в случае сбоя теста.

Вы можете добавить специализации или перегрузки этой функции в свой тест, чтобы включить подробный вывод.

Примечание: Начиная с Qt 5.5, следует отдавать предпочтение предоставлению функции toString() в пространстве имён типа вместо специализации этого шаблона. Если ваш код должен продолжать работать с QTestLib из Qt 5.4 или более ранних версий, вам нужно продолжить использование специализации.

Примечание: Вызывающий код toString() должен удалить возвращенные данные с помощью delete[]. Ваша реализация должна возвращать строку, созданную с помощью new[] или qstrdup(). Самый простой способ сделать это — создать QByteArray или QString и вызвать QTest::toString() для него (см. второй пример ниже).

Пример специализации (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());
    }
}

Приведённый выше пример определяет специализацию toString() для класса с именем MyPoint. В случае сбоя сравнения двух экземпляров MyPoint функция QCOMPARE() будет вызывать эту функцию для вывода содержимого MyPoint в журнал теста.

Тот же пример, но с перегрузкой (Qt ≥ 5.5):

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

См. также QCOMPARE().

[since 5.11] template <typename T1, typename T2> char *QTest::toString(const QPair<T1, T2> &pair)

Это перегруженная функция.

Возвращает текстовое представление пары pair.

Эта функция была введена в Qt 5.11.

[since 5.11] char *QTest::toString(const QVector2D &v)

Это перегруженная функция.

Возвращает текстовое представление двумерного вектора v.

Эта функция была введена в Qt 5.11.

[since 5.11] char *QTest::toString(const QVector3D &v)

Это перегруженная функция.

Возвращает текстовое представление трёхмерного вектора v.

Эта функция была введена в Qt 5.11.

[since 5.11] char *QTest::toString(const QVector4D &v)

Это перегруженная функция.

Возвращает текстовое представление четырёхмерного вектора v.

Эта функция была введена в Qt 5.11.

[since 5.5] char *QTest::toString(QSizePolicy::Policy p)

Это перегруженная функция.

Возвращает текстовое представление политики p.

Эта функция была введена в Qt 5.5.

[since 5.5] char *QTest::toString(QSizePolicy::ControlTypes cts)

Это перегруженная функция.

Возвращает текстовое представление типов элементов управления cts.

Эта функция была введена в Qt 5.5.

[since 5.5] char *QTest::toString(QSizePolicy::ControlType ct)

Это перегруженная функция.

Возвращает текстовое представление типа элемента управления ct.

Эта функция была введена в Qt 5.5.

[since 5.5] char *QTest::toString(QSizePolicy sp)

Это перегруженная функция.

Возвращает текстовое представление политики размера sp.

Эта функция была введена в Qt 5.5.

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

Это перегруженная функция.

Возвращает текстовое представление пары pair.

Эта функция была введена в Qt 5.11.

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

Это перегруженная функция.

Возвращает текстовое представление заданной кортежа tuple.

Эта функция была введена в Qt 5.12.

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

Это перегруженная функция.

Возвращает текстовое представление заданной строки string.

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

Это перегруженная функция.

Возвращает текстовое представление заданной строки string.

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

Это перегруженная функция.

Возвращает текстовое представление массива байтов ba.

См. также QTest::toHexRepresentation().

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

Это перегруженная функция.

Возвращает текстовое представление заданного времени time.

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

Это перегруженная функция.

Возвращает текстовое представление заданной даты date.

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

Это перегруженная функция.

Возвращает текстовое представление даты и времени, заданных dateTime.

END_OF_DOCUMENT_MARKER

[since 5.12] char *QTest::toString(const QCborError &c)

Это перегруженная функция.

Возвращает текстовое представление ошибки CBOR c.

Эта функция была добавлена в Qt 5.12.

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

Это перегруженная функция.

Возвращает текстовое представление заданного символа character.

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

Это перегруженная функция.

Возвращает текстовое представление заданной точки point.

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

Это перегруженная функция.

Возвращает текстовое представление заданного размера size.

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

Это перегруженная функция.

Возвращает текстовое представление заданного прямоугольника rectangle.

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

Это перегруженная функция.

Возвращает текстовое представление заданной точки point.

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

Это перегруженная функция.

Возвращает текстовое представление заданного размера size.

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

Это перегруженная функция.

Возвращает текстовое представление заданного прямоугольника rectangle.

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

Это перегруженная функция.

Возвращает текстовое представление заданной ссылки url.

[since 5.11] char *QTest::toString(const QUuid &uuid)

Это перегруженная функция.

Возвращает текстовое представление заданного uuid.

Эта функция была добавлена в Qt 5.11.

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

Это перегруженная функция.

Возвращает текстовое представление заданной переменной variant.

[since 5.8] char *QTest::toString(std::nullptr_t)

Это перегруженная функция.

Возвращает строку, содержащую nullptr.

Эта функция была добавлена в Qt 5.8.

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

Создает и возвращает QTouchEventSequence для device для имитации событий для widget.

При добавлении событий касания в последовательность, widget также будет использован для преобразования предоставленных координат в координаты экрана, если не указан другой виджет в соответствующих вызовах press(), move() и т.д.

События касания коммитируются в систему событий при вызове деструктора QTouchEventSequence (т.е. когда объект выходит из области видимости), если autoCommit не установлено в false. Если autoCommit равно false, commit() необходимо вызывать вручную.

createTouchDevice() можно вызвать для создания тестового устройства касания для использования с этой функцией.

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

Создает и возвращает QTouchEventSequence для device для имитации событий для window.

При добавлении событий касания в последовательность, window также будет использован для преобразования предоставленных координат в координаты экрана, если не указано другое окно в соответствующих вызовах press(), move() и т.д.

События касания коммитируются в систему событий при вызове деструктора QTouchEventSequence (т.е. когда объект выходит из области видимости), если autoCommit не установлено в false. Если autoCommit равно false, commit() необходимо вызывать вручную.

createTouchDevice() можно вызвать для создания тестового устройства касания для использования с этой функцией.

Эта функция была добавлена в Qt 5.0.

END_OF_DOCUMENT_MARKER

Документация макросов

QBENCHMARK

Этот макрос используется для измерения производительности кода в рамках теста. Код, подлежащий измерению производительности, содержится в блоке кода, следующего за этим макросом.

Например:

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

См. также Создание бенчмарка и Написание бенчмарка.

QBENCHMARK_ONCE

Макрос QBENCHMARK_ONCE предназначен для измерения производительности блока кода, выполняя его один раз.

Этот макрос используется для измерения производительности кода в рамках теста. Код, подлежащий измерению производительности, содержится в блоке кода, следующего за этим макросом.

В отличие от QBENCHMARK, содержимое содержащегося блока кода выполняется только один раз. Время выполнения будет отображено как "0", если оно слишком короткое для измерения выбранным бэкендом. (Используйте)

См. также Создание бенчмарка и Написание бенчмарка.

QCOMPARE(actual, expected)

Макрос QCOMPARE() сравнивает фактическое значение actual с ожидаемым значением expected, используя оператор равенства. Если actual и expected совпадают, выполнение продолжается. В противном случае в журнале тестов регистрируется ошибка, и функция теста завершается, не выполняя последующие проверки.

Всегда соблюдайте семантику параметров QCOMPARE(). Первый параметр, передаваемый в него, всегда должен быть фактическим значением, полученным от тестируемого кода, а второй параметр всегда должен быть ожидаемым значением. Когда значения не совпадают, QCOMPARE() выводит их с метками Фактическое и Ожидаемое. Если порядок параметров меняется, отладка неисправного теста может быть затруднена, и тесты, ожидающие нулевое значение, могут завершаться ошибкой из-за ошибок округления.

QCOMPARE() пытается вывести содержимое значений при сравнении, чтобы в журнале тестов было видно, почему сравнение завершилось ошибкой.

Пример:

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

При сравнении чисел с плавающей точкой (float, double, и qfloat16) используется qFuzzyCompare() для конечных значений. Если qFuzzyIsNull() истинно для обоих значений, они также считаются равными. Бесконечности совпадают, если у них одинаковый знак, а любой NaN в качестве фактического значения совпадает с любым NaN в качестве ожидаемого значения (хотя NaN != NaN, даже если они идентичны).

При сравнении QList, массивов и списков инициализации типа значения могут быть переданы в качестве ожидаемого значения:

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

Обратите внимание, что для использования списков инициализации необходимо определить вспомогательный макрос для предотвращения интерпретации препроцессором запятых как разделителей аргументов макроса:

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

Примечание: QCOMPARE() может использоваться только в функции теста, вызываемой фреймворком для тестирования.

Для собственных классов можно использовать QTest::toString() для форматирования значений для вывода в журнал тестов.

Пример:

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

Возвращаемое значение toString() должно быть new char []. То есть, оно должно быть освобождено с помощью delete[] (а не free() или просто delete) после того, как вызывающий код закончит с ним.

См. также QVERIFY(), QTRY_COMPARE(), QTest::toString() и QEXPECT_FAIL().

QEXPECT_FAIL(dataIndex, comment, mode)

Макрос QEXPECT_FAIL() помечает следующий QCOMPARE() или QVERIFY() как ожидающуюся ошибку. Вместо добавления ошибки в журнал тестов, ожидаемая ошибка будет зарегистрирована.

Если QVERIFY() или QCOMPARE() помечены как ожидающаяся ошибка, но проходят вместо этого, в журнал тестов записывается неожиданный проход (XPASS).

Параметр dataIndex описывает, для какой записи в данных теста ожидается ошибка. Передайте пустую строку ("") если ошибка ожидается для всех записей или если данные теста отсутствуют.

comment будет добавлен к журналу тестов для ожидаемой ошибки.

mode — это QTest::TestFailMode и определяет, должен ли тест продолжать выполнение или нет.

Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком для тестирования.

Пример 1:

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

В приведенном выше примере в выходные данные теста будет записана ожидаемая ошибка, если переменная i не равна 42. Если переменная i равна 42, вместо этого будет записан неожиданный проход. QEXPECT_FAIL() не оказывает никакого влияния на второе утверждение QCOMPARE() в примере.

Пример 2:

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

Функция теста выше не будет продолжать выполнение для записи данных теста data27.

См. также QTest::TestFailMode, QVERIFY() и QCOMPARE().

QFAIL(message)

Этот макрос можно использовать для принудительного завершения теста с ошибкой. Тест прекращает выполнение, а сообщение об ошибке message добавляется в журнал тестов.

Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком для тестирования.

Пример:

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

QFETCH(type, name)

Макрос fetch создает локальную переменную с именем name и типом type в стеке. name и type должны соответствовать столбцу из таблицы данных теста. Это проверяется, и тест прервётся, если проверка не пройдёт.

Предположим, что у теста есть следующие данные:

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

Данные теста содержат два элемента: QString с именем aString и целое число с именем expected. Чтобы получить эти значения в фактическом тесте:

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

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

aString и expected являются переменными в стеке, которые инициализируются текущими данными теста.

Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком для тестирования. Функция теста должна иметь функцию _data.

QFETCH_GLOBAL(type, name)

Этот макрос получает переменную с именем name и типом type из строки в глобальной таблице данных. name и type должны соответствовать столбцу в глобальной таблице данных. Это проверяется, и тест прервётся, если проверка не пройдёт.

Предположим, что у теста есть следующие данные:

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

Собственные данные теста — это одно число на строку. В этом случае initTestCase_data() также предоставляет локаль на строку. Таким образом, этот тест будет выполнен со всеми комбинациями локалей из последнего и числа из первого. Следовательно, с четырьмя строками в глобальной таблице и тремя в локальной, функция теста выполняется для 12 различных тестовых случаев (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);
}

Локаль считывается из глобальной таблицы данных с помощью QFETCH_GLOBAL(), а число считывается из локальной таблицы данных с помощью QFETCH().

Примечание: Этот макрос может использоваться только в методах теста класса с методом initTestCase_data().

[since 5.0] QFINDTESTDATA(filename)

Возвращает QString для файла данных теста, на который указывает filename, или пустой QString, если файл данных теста не был найден.

Этот макрос позволяет тесту загружать данные из внешнего файла без жёсткого кодирования абсолютного имени файла в тесте или использования относительных путей, которые могут быть небезопасны.

Возвращаемый путь будет первым путём из следующего списка, который разрешается в существующий файл или каталог:

  • filename относительно QCoreApplication::applicationDirPath() (только если был создан объект QCoreApplication или QApplication).
  • filename относительно стандартного каталога установки теста (QLibraryInfo::TestsPath с добавленным именем тестового случая в нижнем регистре).
  • filename относительно каталога, содержащего исходный файл, из которого вызван QFINDTESTDATA.

Если указанный файл/каталог не существует ни в одном из этих расположений, в журнал тестов выводится предупреждение.

Например, в этом коде:

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

Файл данных теста будет разрешен как первый существующий файл из:

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

Это позволяет тесту найти свои данные независимо от того, установлен ли тест, и независимо от того, совпадают ли дерево сборки теста и дерево исходных кодов теста.

Примечание: надёжное определение данных теста из каталога исходного кода требует либо использования qmake, либо определения макроса QT_TESTCASE_BUILDDIR для указания рабочей директории, из которой вызывается компилятор, или передачи только абсолютных путей к исходным файлам компилятору. В противном случае абсолютный путь к каталогу исходных кодов определить нельзя.

Примечание: Макрос QT_TESTCASE_BUILDDIR также неявно определяется, если используется CMake и модуль QtTest связан с целевым объектом. Вы можете изменить значение по умолчанию QT_TESTCASE_BUILDDIR, установив свойство QT_TESTCASE_BUILDDIR в целевом объекте.

Примечание: Для тестов, которые используют макрос QTEST_APPLESS_MAIN() для генерации функции main(), QFINDTESTDATA не будет пытаться найти данные теста относительно QCoreApplication::applicationDirPath(). На практике это означает, что тесты, использующие QTEST_APPLESS_MAIN(), не смогут найти свои данные теста, если они запускаются из дерева сборки-тени.

Эта функция была введена в Qt 5.0.

QSKIP(description)

Если вызывается из функции теста, макрос QSKIP() останавливает выполнение теста без добавления ошибки в журнал тестов. Его можно использовать для пропуска тестов, которые не имеют смысла в текущей конфигурации. Например, тест рендеринга шрифтов может вызвать QSKIP(), если нужные шрифты не установлены на тестовой системе.

Текст description добавляется в журнал тестов и должен содержать объяснение, почему тест не может быть выполнен.

Если тест основан на данных, каждый вызов QSKIP() в функции теста пропустит только текущую строку тестовых данных, поэтому безусловный вызов QSKIP() сгенерирует одно сообщение о пропуске в журнале теста для каждой строки тестовых данных.

Если вызов производится из функции _data, макрос QSKIP() остановит выполнение функции _data и предотвратит выполнение связанной тестовой функции. Это полностью пропускает тест, основанный на данных. Чтобы пропустить отдельные строки, сделайте их условными, используя простое if (condition) newRow(...) << ... в функции _data, вместо использования QSKIP() в тестовой функции.

Если вызов производится из initTestCase_data(), макрос QSKIP() пропустит все тестовые и _data функции. Если вызов производится из initTestCase() , когда нет initTestCase_data(), или когда он настраивает только одну строку, QSKIP() также пропустит весь тест. Однако, если initTestCase_data() содержит более одной строки, то initTestCase() вызывается (за которым следует каждый тест и, наконец, завершение) один раз на каждую строку в нем. Следовательно, вызов QSKIP() в initTestCase() просто пропустит все тестовые функции для текущей строки глобальных данных, настроенных с помощью initTestCase_data().

Примечание: Этот макрос можно использовать только в тестовой функции или функции _data, которая вызывается тестовой системой.

Пример:

if (!QSqlDatabase::drivers().contains("SQLITE"))
    QSKIP("This test requires the SQLITE database driver");
Пропуск известных багов

Если тест выявляет известный баг, который не будет исправлен сразу, используйте макрос QEXPECT_FAIL() для документирования ошибки и ссылки на идентификатор отслеживания багов для известной проблемы. При запуске теста ожидаемые ошибки будут помечены как XFAIL в выводе теста и не будут учитываться как ошибки при установке кода возврата тестовой программы. Если ожидаемая ошибка не произошла, будет сообщено об XPASS (неожиданный проход) в выводе теста, и это будет считаться ошибкой теста.

Для известных багов QEXPECT_FAIL() предпочтительнее QSKIP(), так как разработчик не может исправить баг без результата XPASS, напоминающего о том, что тест также необходимо обновить. Если используется QSKIP(), нет напоминания о пересмотре или повторном включении теста, без чего последующие регрессии не будут сообщены.

См. также QEXPECT_FAIL() и Выбор подходящих механизмов для исключения тестов.

QTEST(actual, testElement)

QTEST() — это вспомогательный макрос для QCOMPARE(), который сравнивает значение actual с элементом testElement из данных теста. Если такого элемента нет, тест утверждает.

Помимо этого, QTEST() ведет себя точно так же, как QCOMPARE().

Вместо записи:

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

можно написать:

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

См. также QCOMPARE().

QTEST_APPLESS_MAIN(TestClass)

Реализует функцию main(), которая выполняет все тесты в TestClass.

Ведет себя как QTEST_MAIN(), но не создает объект QApplication. Используйте этот макрос для очень простых автономных тестов без графического интерфейса.

См. также QTEST_MAIN().

QTEST_GUILESS_MAIN(TestClass)

Реализует функцию main(), которая создает объект QCoreApplication и TestClass, и выполняет все тесты в порядке их определения. Используйте этот макрос для создания автономных исполняемых файлов.

Ведет себя как QTEST_MAIN(), но создает объект QCoreApplication вместо объекта QApplication. Используйте этот макрос, если ваш тестовый случай не нуждается в функциональности, предлагаемой QApplication, но цикл событий всё же необходим.

Эта функция была добавлена в Qt 5.0.

См. также QTEST_MAIN().

QTEST_MAIN(TestClass)

Реализует функцию main(), которая создает объект приложения и TestClass, и выполняет все тесты в порядке их определения. Используйте этот макрос для создания автономных исполняемых файлов.

Если определено QT_WIDGETS_LIB, объект приложения будет QApplication, если определено QT_GUI_LIB, объект приложения будет QGuiApplication, в противном случае — QCoreApplication. Если используется qmake и конфигурация включает QT += widgets, то QT_WIDGETS_LIB будет определено автоматически. Аналогично, если используется qmake и конфигурация включает QT += gui, то QT_GUI_LIB будет определено автоматически.

Примечание: На платформах, где по умолчанию включена навигация с помощью клавиатуры, этот макрос принудительно отключит её, если определено QT_WIDGETS_LIB. Это сделано для упрощения использования событий клавиатуры при написании автотестов. Если вы хотите написать тестовый случай, использующий навигацию с помощью клавиатуры, вы должны включить её либо в функциях initTestCase() или init() вашего тестового случая, вызвав QApplication::setNavigationMode().

Пример:

QTEST_MAIN(TestQString)

См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec() и QApplication::setNavigationMode().

QTRY_COMPARE(actual, expected)

Производит сравнение значений actual и expected, вызывая QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.0.

См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

Макрос QTRY_COMPARE_WITH_TIMEOUT() похож на QCOMPARE(), но выполняет сравнение значений actual и expected многократно, пока значения не станут равными или не будет достигнут timeout (в миллисекундах). Между каждым сравнением обрабатываются события. Если таймаут достигнут, в журнале теста регистрируется ошибка, и дальнейшее выполнение теста не произойдёт.

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.0.

См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().

QTRY_VERIFY2(condition, message)

Проверяет condition, вызывая QTRY_VERIFY2_WITH_TIMEOUT() с таймаутом в пять секунд. Если condition всё ещё ложно, выводится message. message — обычная строка C.

Пример:

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

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.6.

См. также QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().

QTRY_VERIFY(condition)

Проверяет condition, вызывая QTRY_VERIFY_WITH_TIMEOUT() с таймаутом в пять секунд.

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.0.

См. также QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().

QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

Макрос QTRY_VERIFY2_WITH_TIMEOUT похож на QTRY_VERIFY_WITH_TIMEOUT(), за исключением того, что он выводит подробное сообщение message, когда condition всё ещё ложно после указанного timeout (в миллисекундах). message — обычная строка C.

Пример:

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

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.6.

См. также QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().

QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

Макрос QTRY_VERIFY_WITH_TIMEOUT() похож на QVERIFY(), но проверяет condition многократно, пока условие не станет истинным или не будет достигнут timeout (в миллисекундах). Между каждым вычислением обрабатываются события. Если таймаут достигнут, в журнале теста регистрируется ошибка, и дальнейшее выполнение теста не произойдёт.

Примечание: Этот макрос можно использовать только в тестовой функции, которая вызывается тестовой системой.

Эта функция была добавлена в Qt 5.0.

См. также QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE(), и QEXPECT_FAIL().

QVERIFY2(condition, message)

Макрос QVERIFY2() ведет себя точно так же, как QVERIFY(), за исключением того, что он сообщает message, когда condition ложно. message — это обычная строка C.

Сообщение также может быть получено из вызова функции, которая возвращает обычную строку C, например, qPrintable() применённый к QString, который может быть создан любым из обычных способов, включая применение .args() для форматирования некоторых данных.

Пример:

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

Например, если у вас есть объект файла и вы тестируете его функцию open(), вы можете написать тест со следующим оператором:

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

Если этот тест завершится неудачно, это не даст никаких подсказок о причинах неудачи открытия файла:

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

Если у вас есть более информативное сообщение об ошибке, которое можно составить из тестируемых значений, вы можете использовать QVERIFY2() для передачи этого сообщения вместе с условием теста, чтобы предоставить более информативное сообщение об ошибке:

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

Если этот раздел тестируется в системе Qt CI, указанное выше подробное сообщение об ошибке будет вставлено в сводку, опубликованную в системе контроля кода:

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

См. также QVERIFY(), QCOMPARE() и QEXPECT_FAIL().

QVERIFY(condition)

Макрос QVERIFY() проверяет, истинно ли condition. Если истинно, выполнение продолжается. Если нет, в журнал тестов записывается неудача, и дальнейшее выполнение теста не произойдёт.

Вы можете использовать QVERIFY2(), если целесообразно и полезно добавить дополнительную информацию в отчёт об ошибке теста.

Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком тестирования.

Например, следующий код демонстрирует использование этого макроса для проверки того, что объект QSignalSpy является допустимым:

QVERIFY(spy.isValid());

Для получения более подробной информации об ошибке используйте QCOMPARE(x, y) вместо QVERIFY(x == y), поскольку при сбое сравнения оно сообщает как ожидаемое, так и фактическое значение.

См. также QCOMPARE(), QTRY_VERIFY(), QSignalSpy и QEXPECT_FAIL().

[since 5.3] QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)

Макрос QVERIFY_EXCEPTION_THROWN выполняет expression и пытается перехватить исключение, брошенное из expression.

Возможны несколько исходов:

  • Если expression выбрасывает исключение, которое совпадает с exceptiontype или является производным от него, выполнение продолжится.
  • В противном случае, если expression не выбрасывает исключение или брошенное исключение не является производным от std::exception, в журнал тестов запишется неудача, и макрос прервёт выполнение (из вложенной функции).
  • Если брошенное исключение не является производным ни от std::exception, ни от exceptiontype, в журнал тестов запишется неудача, и исключение будет повторно брошено. Это помогает избежать проблем с, например, исключениями отмены pthread.

Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком тестирования.

Эта функция была добавлена в Qt 5.3.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtest.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API