Пространство имён 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_Undefined, AI_Name, AI_Result, AI_Tests, AI_Failures, …, AI_Timestamp } |
| перечисление | ДействиеКлавиши { Press, Release, Click, Shortcut } |
| перечисление | ТипЭлементаЛога { LET_Undefined, LET_Property, LET_Properties, LET_Failure, LET_Error, …, LET_SystemError } |
| перечисление | ДействиеМыши { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove } |
| перечисление | МетрикаQBenchmark { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults } |
| перечисление | РежимОшибкиТеста { Abort, Continue } |
Функции
| void | addColumn(const char *name, T *dummy = 0) |
| QTestData & | addRow(const char *format, ...) |
| const char * | benchmarkMetricName(QTest::QBenchmarkMetric metric) |
| const char * | benchmarkMetricUnit(QTest::QBenchmarkMetric metric) |
| QPointingDevice * | createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen, QInputDevice::Capabilities caps = QInputDevice::Capability::Position) |
| const char * | currentAppName() |
| const char * | currentDataTag() |
| bool | currentTestFailed() |
| const char * | currentTestFunction() |
| void | ignoreMessage(QtMsgType type, const char *message) |
| void | ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern) |
| void | keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keySequence(QWindow *window, const QKeySequence &keySequence) |
| void | keySequence(QWidget *widget, const QKeySequence &keySequence) |
| void | mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1) |
| void | mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1) |
| void | mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| void | mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1) |
| QTestData & | newRow(const char *dataTag) |
| int | qExec(QObject *testObject, int argc = 0, char **argv = nullptr) |
| int | qExec(QObject *testObject, const QStringList &arguments) |
| QSharedPointer<QTemporaryDir> | qExtractTestData(const QString &dirName) |
| void | qSleep(int ms) |
| void | qWait(int ms) |
| bool | qWaitFor(Functor predicate, int timeout = 5000) |
| bool | qWaitForWindowActive(QWindow *window, int timeout = 5000) |
| bool | qWaitForWindowActive(QWidget *widget, int timeout = 5000) |
| bool | qWaitForWindowExposed(QWindow *window, int timeout = 5000) |
| bool | qWaitForWindowExposed(QWidget *widget, int timeout = 5000) |
| void | setBenchmarkResult(qreal result, QTest::QBenchmarkMetric metric) |
| char * | toHexRepresentation(const char *ba, int length) |
| char * | toString(const 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 используется для моделирования последовательности событий касания. Подробнее...
Документация типов
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 |
QTest::AI_Time |
16 |
QTest::AI_Timestamp |
17 |
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 |
? |
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.
См. также 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().
Примечание: Этот макрос можно использовать только в функции данных теста, вызываемой фреймворком.
См. Data Driven Testing для более подробного примера.
См. также 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"); Примечание: Эта функция может быть использована только в функции данных теста, вызываемой фреймворком.
См. Data Driven Testing для более подробного примера.
Эта функция была добавлена в 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 соответствующего типа type выводится, оно будет удалено из протокола тестирования. Если тестирование завершено, а сообщение 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 соответствующего типа type, оно будет удалено из протокола тестирования. Если тестирование завершено, а сообщение не было выведено, в протокол тестирования будет добавлено сообщение об ошибке.
Примечание: Вызов этой функции игнорирует только одно сообщение. Если необходимо игнорировать сообщение, выведенное дважды, необходимо дважды вызвать функцию ignoreMessage().
Функция была введена в Qt 5.3.
void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Имитирует нажатие клавиши key с необязательным modifier на widget. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примеры:
QTest::keyClick(myWidget, Qt::Key_Escape); QTest::keyClick(myWidget, Qt::Key_Escape, Qt::ShiftModifier, 200);
Первый пример выше имитирует нажатие клавиши escape на myWidget без модификаторов клавиатуры и без задержки. Второй пример имитирует нажатие shift-escape на myWidget после задержки теста в 200 мс.
См. также QTest::keyClicks().
[since 5.0] void QTest::keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Имитирует нажатие клавиши key с необязательным modifier на window. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примеры:
QTest::keyClick(&myWindow, Qt::Key_Escape); QTest::keyClick(&myWindow, Qt::Key_Escape, Qt::ShiftModifier, 200);
Первый пример выше имитирует нажатие клавиши escape на myWindow без модификаторов клавиатуры и без задержки. Второй пример имитирует нажатие shift-escape на myWindow после задержки теста в 200 мс.
Функция была введена в Qt 5.0.
См. также QTest::keyClicks().
[since 5.0] void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Имитирует нажатие клавиши key с необязательным modifier на window. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Пример:
QWidget myWindow; QTest::keyClick(&myWindow, Qt::Key_Tab);
В примере выше имитируется нажатие a на myWindow без модификаторов клавиатуры и без задержки теста.
Функция была введена в Qt 5.0.
См. также QTest::keyClicks().
void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Имитирует нажатие клавиши key с необязательным modifier на widget. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Пример:
QTest::keyClick(myWidget, 'a');
В примере выше имитируется нажатие a на myWidget без модификаторов клавиатуры и без задержки теста.
См. также QTest::keyClicks().
void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Имитирует нажатие последовательности клавиш sequence на widget. Необязательно, можно указать модификатор клавиатуры 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)
Имитирует нажатие на кнопку мыши button с необязательным модификатором modifier на widget. Позиция определяется pos; по умолчанию используется центр widget. Если задано delay, тест подождёт указанное количество миллисекунд перед нажатием.
См. также QTest::mouseRelease() и QTest::mouseClick().
[since 5.0] void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Это перегруженный метод.
Имитирует нажатие на кнопку мыши button с необязательным модификатором stateKey на window. Позиция определяется pos; по умолчанию используется центр window. Если задано delay, тест подождёт указанное количество миллисекунд перед нажатием.
Этот метод был добавлен в Qt 5.0.
См. также QTest::mouseRelease() и QTest::mouseClick().
void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Имитирует отпускание кнопки мыши button с необязательным модификатором modifier на widget. Позиция определяется pos; по умолчанию используется центр widget. Если задано delay, тест подождёт указанное количество миллисекунд перед отпусканием.
См. также QTest::mousePress() и QTest::mouseClick().
[since 5.0] void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Это перегруженный метод.
Имитирует отпускание кнопки мыши button с необязательным модификатором stateKey на window. Позиция определяется pos; по умолчанию используется центр window. Если задано 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**), но вместо списка char** принимает QStringList аргументов arguments.
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 миллисекунд, в противном случае возвращает window.
Это полезно в основном для асинхронных систем, таких как X11, где окно отображается на экране некоторое время после того, как его попросили показать.
Обратите внимание, что окно, отображаемое на экране, может не считаться отображённым, если область клиенти окна полностью закрыта другими окнами или окно по другим причинам не видно. В этом случае функция вернёт результат ожидания.
Эта функция была добавлена в Qt 5.0.
См. также qWaitForWindowActive() и QWindow::isExposed().
[since 5.0] bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
Ожидает timeout миллисекунд или пока окно виджета widget не будет отображено. Возвращает true если окно виджета widget отображается в течение timeout миллисекунд, в противном случае возвращает widget.
Это полезно в основном для асинхронных систем, таких как 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 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.
Документация макросов
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().
QTEST_GUILESS_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект QCoreApplication и TestClass и выполняет все тесты в порядке их определения. Используйте этот макрос для создания автономных исполняемых файлов.
Ведет себя как QTEST_MAIN(), но создаёт объект QCoreApplication вместо QApplication. Используйте этот макрос, если вашему тестовому случаю не нужна функциональность QApplication, но цикл событий всё равно необходим.
Эта функция была введена в Qt 5.0.
См. также QTEST_MAIN().
QTEST_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект приложения и TestClass, а затем выполняет все тесты в порядке их определения. Используйте этот макрос для создания автономных исполняемых файлов.
Если определено QT_WIDGETS_LIB, объект приложения будет QApplication, если определено QT_GUI_LIB, объект приложения будет QGuiApplication, иначе — QCoreApplication. Если используется qmake и конфигурация включает QT += widgets, то QT_WIDGETS_LIB будет определено автоматически. Аналогично, если используется qmake и конфигурация включает QT += gui, то QT_GUI_LIB будет определено автоматически.
Примечание: На платформах, где навигация по клавиатуре включена по умолчанию, этот макрос принудительно выключит её, если определено QT_WIDGETS_LIB. Это делается для упрощения использования событий клавиатуры при написании автотестов. Если вы хотите написать тестовый случай, использующий навигацию по клавиатуре, вы должны включить её либо в функции initTestCase() или init() вашего тестового случая, вызвав QApplication::setNavigationMode().
Пример:
QTEST_MAIN(TestQString)
См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec() и QApplication::setNavigationMode().
QTRY_COMPARE(actual, expected)
Выполняет сравнение значений actual и expected, вызывая QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в Qt 5.0.
См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
Макрос QTRY_COMPARE_WITH_TIMEOUT() аналогичен QCOMPARE(), но выполняет сравнение значений actual и expected многократно, пока значения не станут равными или не истечёт таймаут (в миллисекундах). Между каждым сравнением обрабатываются события. Если таймаут истечёт, в журнале теста будет зафиксирована ошибка, и дальнейшее выполнение теста не будет осуществлено.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в Qt 5.0.
См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
QTRY_VERIFY2(condition, message)
Проверяет condition, вызывая QTRY_VERIFY2_WITH_TIMEOUT() с таймаутом в пять секунд. Если condition по-прежнему ложно, выводится message. message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData());
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в Qt 5.6.
См. также QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY(condition)
Проверяет condition, вызывая QTRY_VERIFY_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в Qt 5.0.
См. также QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
Макрос QTRY_VERIFY2_WITH_TIMEOUT аналогичен QTRY_VERIFY_WITH_TIMEOUT(), за исключением того, что он выводит подробное сообщение message, когда condition по-прежнему ложно после указанного таймаута (в миллисекундах). Сообщение message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10000);
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в Qt 5.6.
См. также QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)
Макрос QTRY_VERIFY_WITH_TIMEOUT() аналогичен QVERIFY(), но проверяет условие condition многократно, пока оно не станет истинным или не истечёт таймаут (в миллисекундах). Между каждым вычислением обрабатываются события. Если таймаут истечёт, в журнале теста будет зафиксирована ошибка, и дальнейшее выполнение теста не будет осуществлено.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовой средой.
Эта функция была введена в 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.1/qtest.html