Spec-Zone.ru › Qt 5.13

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

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

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

Классы

класс Последовательность событий QTouchEvent

Типы

перечисление ИндексАтрибута { AI_Undefined, AI_Name, AI_Result, AI_Tests, ..., AI_Iterations }
перечисление ДействиеКлавиши { Нажатие, Отпускание, Щелчок, СочетаниеКлавиш }
перечисление ТипЭлементаЛога { LET_Undefined, LET_Свойство, LET_Свойства, LET_Ошибка, ..., LET_ОшибкаСистемы }
перечисление ДействиеМыши { НажатиеМыши, ОтпусканиеМыши, ЩелчокМыши, ДвойнойЩелчокМыши, ДвижениеМыши }
перечисление МетрикаQBenchmark { КадровВСекунду, БитовВСекунду, БайтовВСекунду, МиллисекундыWalltime, ..., ОшибкиЭмуляции }
перечисление РежимОстановкиТеста { Прервать, Продолжить }

Функции

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, 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 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, char ascii, 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 keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyPress(QWindow *window, char 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 keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
void keyRelease(QWindow *window, char 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 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)
END_OF_DOCUMENT_MARKER
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::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)
char * toString(QSizePolicy::ControlTypes cts)
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)

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

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

Классы

class QTouchEventSequence

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

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

enum 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

enum QTest::KeyAction

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

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

enum 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

enum QTest::MouseAction

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

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

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

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

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

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

См. также 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");
}

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

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

Эта функция была добавлена в 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(). Если сообщение с соответствующим type выводится, оно будет удалено из протокола теста. Если тест завершился, а сообщение не было выведено, в протокол теста будет добавлено сообщение об ошибке теста.

Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое вы хотите проигнорировать, выводится дважды, вам нужно дважды вызвать 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, 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::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::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = ..., int delay = ...)

Имитирует нажатие последовательности 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 = ..., int delay = ...)

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

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

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

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

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

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

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

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

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

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

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

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

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, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)

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

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

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

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

См. также 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 = ...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Имитирует нажатие на кнопку мыши с необязательным модификатором stateKey на окне. Позиция определяется 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; по умолчанию — центр widget. Если указано delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.

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

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

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

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

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

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

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

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

Этот метод был представлен в 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 не будет отображён. Возвращает true, если window отображён в течение timeout миллисекунд, в противном случае возвращает false.

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

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

Этот метод был представлен в 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, представленной как последовательность шестнадцатеричных символов, разделённых пробелами. Если входная строка считается слишком длинной, она усекается. Усечение обозначается в возвращаемой строке как многоточие в конце. Вызывающая сторона владеет возвращённым указателем и должна убедиться, что он позже передаётся в оператор delete[].

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

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

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

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

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.

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

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

END_OF_DOCUMENT_MARKER

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.

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

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

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

Этот метод был введён в 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.

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

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

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

QTest::QBENCHMARK_ONCE

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

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

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

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

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

QTest::QCOMPARE(actual, expected)

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

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

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

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

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

Пример:

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

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

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

QTest::QFAIL(message)

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

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

Пример:

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

QTest::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.

QTest::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.

QTest::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::QTEST(actual, testElement)

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

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

Вместо того чтобы писать:

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

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

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

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

QTest::QTEST_APPLESS_MAIN(TestClass)

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

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

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

QTest::QTEST_GUILESS_MAIN(TestClass)

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

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

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

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

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

QTest::QTRY_COMPARE(actual, expected)

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

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

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

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

QTest::QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

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

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

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

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

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

QTest::QTRY_VERIFY(condition)

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

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

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

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

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

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

QTest::QVERIFY2(condition, message)

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

Пример:

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

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

QTest::QVERIFY(condition)

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

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

Пример:

QVERIFY(1 + 1 == 2);

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

QTest::QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)

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

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

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

QTest::QWARN(message)

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

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

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

Spec-Zone.ru

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