Spec-Zone.ru › Qt 5.12

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

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

Заголовок: #include <QTest>
qmake: QT += testlib
  • Устаревшие члены

Классы

класс QTouchEventSequence

Типы

перечисление AttributeIndex { AI_Undefined, AI_Name, AI_Result, AI_Tests, ..., AI_Iterations }
перечисление KeyAction { Press, Release, Click, Shortcut }
перечисление LogElementType { LET_Undefined, LET_Property, LET_Properties, LET_Failure, ..., LET_SystemError }
перечисление MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove }
перечисление QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, ..., EmulationFaults }
перечисление TestFailMode { Abort, Continue }

Функции

void addColumn(const char *name, T *dummy = ...)
QTestData & addRow(const char *format, ...)
const char * benchmarkMetricName(QTest::QBenchmarkMetric metric)
const char * benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
QTouchDevice * createTouchDevice(QTouchDevice::DeviceType devType = ...)
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 = ..., int delay = ...)
void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keySequence(QWindow *window, const QKeySequence &keySequence)
void keySequence(QWidget *widget, const QKeySequence &keySequence)
void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
void mouseMove(QWidget *widget, QPoint pos = ..., int delay = ...)
void mouseMove(QWindow *window, QPoint pos = ..., int delay = ...)
void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
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 T &value)
char * toString(const QPair<T1, T2> &pair)
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 QStringView &string)
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)
char * toString(const QVector2D &v)
char * toString(const QVector3D &v)
char * toString(const QVector4D &v)
char * toString(QSizePolicy::Policy p)
QTest::QTouchEventSequence touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit)
QTest::QTouchEventSequence touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit)

Макросы

QBENCHMARK
QBENCHMARK_ONCE
QCOMPARE(actual, expected)
QEXPECT_FAIL(dataIndex, comment, mode)
QFAIL(message)
QFETCH(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)
QWARN(message)

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

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

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

Классы

класс QTouchEventSequence

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

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

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

Это перечисление нумерует различные тесты.

Константа Значение
QTest::AI_Undefined -1
QTest::AI_Name 0
QTest::AI_Result 1
QTest::AI_Tests 2
QTest::AI_Failures 3
QTest::AI_Errors 4
QTest::AI_Type 5
QTest::AI_Description 6
QTest::AI_PropertyValue 7
QTest::AI_QTestVersion 8
QTest::AI_QtVersion 9
QTest::AI_File 10
QTest::AI_Line 11
QTest::AI_Metric 12
QTest::AI_Tag 13
QTest::AI_Value 14
QTest::AI_Iterations 15

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

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

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

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

Перечисление указывает типы сообщений журнала тестов.

Константа Значение
QTest::LET_Undefined -1
QTest::LET_Property 0
QTest::LET_Properties 1
QTest::LET_Failure 2
QTest::LET_Error 3
QTest::LET_TestCase 4
QTest::LET_TestSuite 5
QTest::LET_Benchmark 6
QTest::LET_SystemError 7

перечисление 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.

Этот перечисление был введен или изменён в Qt 4.7.

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

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

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

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

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

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

void QTest::addColumn(const char *name, T *dummy = ...)

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

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

Пример:

void myTestFunction_data() {
    QTest::addColumn<int>("intval");
    QTest::addColumn<QString>("str");
    QTest::addColumn<double>("dbl");

    QTest::newRow("row1") << 1 << "hello" << 1.5;
}

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

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

См. Data Driven Testing для более подробного примера.

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

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

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

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

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

Пример:

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

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

См. Data Driven Testing для более подробного примера.

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

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

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

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

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

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

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

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

QTouchDevice *QTest::createTouchDevice(QTouchDevice::DeviceType devType = ...)

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

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

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

См. также QTest::QTouchEventSequence.

const char *QTest::currentAppName()

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

const char *QTest::currentDataTag()

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

bool QTest::currentTestFailed()

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

const char *QTest::currentTestFunction()

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

Пример:

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

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

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

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

Пример:

QDir dir;

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

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

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 = ..., int delay = ...)

Имитирует нажатие клавиши 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().

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

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

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

Пример:

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

Имитирует нажатие клавиши 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().

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

void myTestFunction_data()
{
    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** списка.

Этот метод был добавлен в Qt 4.4.

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().

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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

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

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

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)
    {
        QByteArray ba = "MyPoint(";
        ba += QByteArray::number(point.x()) + ", " + QByteArray::number(point.y());
        ba += ')';
        return qstrdup(ba.data());
    }
}

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

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

namespace MyNamespace {
    char *toString(const MyPoint &point)
    {
        // bring QTest::toString overloads into scope:
        using QTest::toString;
        // delegate char* handling to QTest::toString(QByteArray):
        return toString("MyPoint(" +
                        QByteArray::number(point.x()) + ", " +
                        QByteArray::number(point.y()) + ')');
    }
}

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

char *QTest::toString(const QPair<T1, T2> &pair)

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

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

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

char *QTest::toString(QSizePolicy::ControlTypes cts)

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

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

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

char *QTest::toString(QSizePolicy::ControlType ct)

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

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

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

char *QTest::toString(QSizePolicy sp)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

char *QTest::toString(const QLatin1String &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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

char *QTest::toString(QSizePolicy::Policy p)

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

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

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

QTest::QTouchEventSequence QTest::touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit)

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

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

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

QTest::QTouchEventSequence QTest::touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit)

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

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

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

Эта функция была добавлена в 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», если оно слишком короткое для измерения выбранным бэкендом. (Используйте)

Эта функция была представлена в Qt 4.6.

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

QCOMPARE(actual, expected)

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

В случае сравнения чисел с плавающей точкой и двойной точности используется qFuzzyCompare() для сравнения. Это означает, что сравнение с 0, скорее всего, завершится неудачей. Одним из решений является сравнение с 1 и добавление 1 к результату.

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

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

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

Пример:

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

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

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 должен соответствовать имени элемента из данных теста. Если такого элемента нет, тест вызовет ошибку.

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

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.

QFINDTESTDATA(filename)

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

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

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

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

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

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

// Source: /home/user/sources/myxmlparser/tests/tst_myxmlparser/tst_myxmlparser.cpp
// Build:  /home/user/build/myxmlparser/tests/tst_myxmlparser
// Qt:     /usr/local/Qt-5.0.0
void 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, чтобы он указывал на рабочую директорию, из которой вызывается компилятор, или передачи только абсолютных путей к исходным файлам компилятору. В противном случае абсолютный путь к исходному каталогу определить невозможно.

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

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

QSKIP(description)

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

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

Если вызван из функции _data, макрос QSKIP() остановит выполнение функции _data и предотвратит выполнение связанной функции теста.

Если вызван из initTestCase() или initTestCase_data(), макрос QSKIP() пропустит все функции тестов и _data.

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

Пример:

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

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().

Пример:

class TestQString: public QObject { ... };
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().

QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

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

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

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

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

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().

QTRY_VERIFY(condition)

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

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

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

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

QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

Макрос QTRY_VERIFY2_WITH_TIMEOUT похож на QTRY_VERIFY_WITH_TIMEOUT(), за исключением того, что он выводит подробное сообщение message, когда condition по-прежнему ложно после истечения заданного таймаута (в миллисекундах). 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().

QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

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

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

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

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

QVERIFY2(condition, message)

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

Пример:

QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occurred.");

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

QVERIFY(condition)

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

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

Пример:

QVERIFY(1 + 1 == 2);

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

QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)

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

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

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

QWARN(message)

Добавляет сообщение message как предупреждение в журнал тестов. Эта макрос может быть использована в любом месте ваших тестов.

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

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

Spec-Zone.ru

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