Spec-Zone.ru › Qt 6.0

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

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

Заголовок: #include <QTest>
CMake: find_package(Qt6 COMPONENTS Test REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib

Классы

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

Типы

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

Функции

void addColumn(const char *name, T *dummy = 0)
QTestData & addRow(const char *format, ...)
const char * benchmarkMetricName(QTest::QBenchmarkMetric metric)
const char * benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
QPointingDevice * createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position)
const char * currentAppName()
const char * currentDataTag()
bool currentTestFailed()
const char * currentTestFunction()
void ignoreMessage(QtMsgType type, const char *message)
void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
void keySequence(QWindow *window, const QKeySequence &keySequence)
void keySequence(QWidget *widget, const QKeySequence &keySequence)
void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1)
void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1)
void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
QTestData & newRow(const char *dataTag)
int qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
int qExec(QObject *testObject, const QStringList &arguments)
QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName)
void qSleep(int ms)
END_OF_DOCUMENT_MARKER
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(const QVector2D &v)
char * toString(const QVector3D &v)
char * toString(const QVector4D &v)
char * toString(QSizePolicy::Policy p)
char * toString(QSizePolicy::ControlTypes cts)
char * toString(QSizePolicy::ControlType ct)
char * toString(QSizePolicy sp)
char * toString(const std::pair<T1, T2> &pair)
char * toString(const std::tuple<Types...> &tuple)
char * toString(const 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)
QTest::QTouchEventWidgetSequence touchEvent(QWidget *widget, QPointingDevice *device, bool autoCommit = true)
QTest::QTouchEventSequence touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit = true)

Макросы

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

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

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

Классы

class 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::AI_Time 16
QTest::AI_Timestamp 17

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

const char *QTest::currentAppName()

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

const char *QTest::currentDataTag()

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

bool QTest::currentTestFailed()

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

const char *QTest::currentTestFunction()

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

Пример:

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

Примеры:

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

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

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

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

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

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

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

Примеры:

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

Пример:

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

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

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

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

Имитирует нажатие последовательности sequence клавиш на widget. Можно указать необязательные 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 = Qt::NoModifier, int delay = -1)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

void QTest::qSleep(int ms)

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

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

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

Пример:

QTest::qSleep(250);

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

void QTest::qWait(int ms)

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

Пример:

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример специализации (Qt ≤ 5.4):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[since 5.11] 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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

QBENCHMARK

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

Например:

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

См. также Создание эталонного теста и Написание эталонного теста.

QBENCHMARK_ONCE

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

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

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

См. также Создание эталонного теста и Написание эталонного теста.

QCOMPARE(actual, expected)

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

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

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

Пример:

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

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

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

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

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

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

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

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

Пример:

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

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

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

QEXPECT_FAIL(dataIndex, comment, mode)

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

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

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

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

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

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

Пример 1:

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

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

Пример 2:

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

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

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

QFAIL(message)

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

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

Пример:

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

QFETCH(type, name)

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

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

void TestQString::toInt_data()
{
    QTest::addColumn<QString>("aString");
    QTest::addColumn<int>("expected");

    QTest::newRow("positive value") << "42" << 42;
    QTest::newRow("negative value") << "-42" << -42;
    QTest::newRow("zero") << "0" << 0;
}

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

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

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

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

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

QFETCH_GLOBAL(type, name)

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

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

void TestQLocale::initTestCase_data()
{
    QTest::addColumn<QLocale>("locale");
    QTest::newRow("C") << QLocale::c();
    QTest::newRow("UKish") << QLocale("en_GB");
    QTest::newRow("USAish") << QLocale(QLocale::English, QLocale::UnitedStates);
}

void TestQLocale::roundTripInt_data()
{
    QTest::addColumn<int>("number");
    QTest::newRow("zero") << 0;
    QTest::newRow("one") << 1;
    QTest::newRow("two") << 2;
    QTest::newRow("ten") << 10;
}

Данные самого теста — это одно число на строке. В этом случае initTestCase_data() также предоставляет локаль на строку. Таким образом, этот тест будет выполняться со всеми сочетаниями локалей из последнего и числа из первого. Следовательно, при четырёх строках в глобальной таблице и трёх в локальной таблицах функция теста будет выполняться для 12 различных тестовых случаев (4 * 3 = 12).

void TestQLocale::roundTripInt()
{
    QFETCH_GLOBAL(QLocale, locale);
    QFETCH(int, number);
    bool ok;
    QCOMPARE(locale.toInt(locale.toString(number), &ok), number);
    QVERIFY(ok);
}

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

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

[since 5.0] QFINDTESTDATA(filename)

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

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

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

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

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

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

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

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

  • /home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
  • /usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml
  • /home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml

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

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

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

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

QSKIP(description)

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

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

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

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

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

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

Пример:

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

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

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

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

QTEST(actual, testElement)

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

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

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

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

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

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

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

QTEST_APPLESS_MAIN(TestClass)

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

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

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

[since 5.0] QTEST_GUILESS_MAIN(TestClass)

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

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

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

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

QTEST_MAIN(TestClass)

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

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

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

Пример:

QTEST_MAIN(TestQString)

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

[since 5.0] QTRY_COMPARE(actual, expected)

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

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

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

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

[since 5.0] QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)

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

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

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

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

[since 5.6] QTRY_VERIFY2(condition, message)

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

Пример:

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

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

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

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

[since 5.0] QTRY_VERIFY(condition)

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

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

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

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

[since 5.6] QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)

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

Пример:

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

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

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

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

[since 5.0] QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)

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

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

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

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

QVERIFY2(condition, message)

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

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

Пример:

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

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

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

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

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

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

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

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

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

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

QVERIFY(condition)

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

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

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

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

QVERIFY(spy.isValid());

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

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

[since 5.3] QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)

Макрос QVERIFY_EXCEPTION_THROWN выполняет expression и пытается перехватить исключение, сгенерированное из expression. Если expression выбрасывает исключение, и его тип совпадает с exceptiontype или 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-6.0/qtest.html

Spec-Zone.ru

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