Пространство имён QTest
Пространство имён QTest содержит все функции и объявления, относящиеся к Qt Test. Подробнее...
| Заголовок: | #include <QTest> |
| qmake: | QT += testlib |
Классы
| класс | QTouchEventSequence |
Типы
| перечисление | AttributeIndex { AI_Undefined, AI_Name, AI_Result, AI_Tests, ..., AI_Iterations } |
| перечисление | KeyAction { Press, Release, Click, Shortcut } |
| перечисление | LogElementType { LET_Undefined, LET_Property, LET_Properties, LET_Failure, ..., LET_SystemError } |
| перечисление | MouseAction { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove } |
| перечисление | QBenchmarkMetric { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, ..., EmulationFaults } |
| перечисление | TestFailMode { Abort, Continue } |
Функции
| void | addColumn(const char *name, T *dummy = nullptr) |
| QTestData & | addRow(const char *format, ...) |
| const char * | benchmarkMetricName(QBenchmarkMetric metric) |
| const char * | benchmarkMetricUnit(QBenchmarkMetric metric) |
| bool | compare_ptr_helper(const volatile void *t1, const volatile void *t2, const char *actual, const char *expected, const char *file, int line) |
| bool | compare_ptr_helper(const volatile void *t1, std::nullptr_t, const char *actual, const char *expected, const char *file, int line) |
| bool | compare_ptr_helper(std::nullptr_t, const volatile void *t2, const char *actual, const char *expected, const char *file, int line) |
| QTouchDevice * | createTouchDevice(QTouchDevice::DeviceType devType = QTouchDevice::TouchScreen) |
| 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, 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 | keyClick(QWindow *window, Qt::Key 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(KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | keyEvent(KeyAction action, QWindow *window, 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, 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 | keyPress(QWindow *window, 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, 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 | keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| 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 = Q_NULLPTR) |
| int | qExec(QObject *testObject, const QStringList &arguments) |
| QSharedPointer<QTemporaryDir> | qExtractTestData(const QString &dirName) |
| void | qSleep(int ms) |
| void | qWait(int ms) |
| 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, QBenchmarkMetric metric) |
| char * | toHexRepresentation(const char *ba, int length) |
| char * | toPrettyCString(const char *unicode, int length) |
| char * | toPrettyUnicode(const ushort *unicode, int length) |
| char * | toString(const QUuid &uuid) |
| 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 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 QString &string) |
| char * | toString(const QVariant &variant) |
| char * | toString(std::nullptr_t) |
| char * | toString(QSizePolicy::Policy p) |
| char * | toString(QSizePolicy::ControlTypes cts) |
| char * | toString(QSizePolicy::ControlType ct) |
| char * | toString(QSizePolicy sp) |
| char * | toString(const T &value) |
| QTouchEventSequence | touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit = true) |
| QTouchEventSequence | touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit = true) |
Макросы
| QBENCHMARK | |
| QBENCHMARK_ONCE | |
| QCOMPARE(actual, expected) | |
| QEXPECT_FAIL(dataIndex, comment, mode) | |
| QFAIL(message) | |
| QFETCH(type, name) | |
| QFINDTESTDATA(filename) | |
| QSKIP(description) | |
| QTEST(actual, testElement) | |
| QTEST_APPLESS_MAIN(TestClass) | |
| QTEST_GUILESS_MAIN(TestClass) | |
| QTEST_MAIN(TestClass) | |
| QTRY_COMPARE(actual, expected) | |
| QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout) | |
| QTRY_VERIFY2(condition, message) | |
| QTRY_VERIFY(condition) | |
| QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout) | |
| QTRY_VERIFY_WITH_TIMEOUT(condition, timeout) | |
| QVERIFY2(condition, message) | |
| QVERIFY(condition) | |
| QVERIFY_EXCEPTION_THROWN(expression, exceptiontype) | |
| QWARN(message) |
Подробное описание
Пространство имен QTest содержит все функции и объявления, относящиеся к Qt Test.
См. Обзор Qt Test для получения информации о том, как писать модульные тесты.
Классы
класс QTouchEventSequence
Класс QTouchEventSequence используется для имитации последовательности событий касания. Подробнее...
Документация типов
перечисление QTest::AttributeIndex
Этот перечисление нумерует различные тесты.
| Константа | Значение |
|---|---|
QTest::AI_Undefined |
-1 |
QTest::AI_Name |
0 |
QTest::AI_Result |
1 |
QTest::AI_Tests |
2 |
QTest::AI_Failures |
3 |
QTest::AI_Errors |
4 |
QTest::AI_Type |
5 |
QTest::AI_Description |
6 |
QTest::AI_PropertyValue |
7 |
QTest::AI_QTestVersion |
8 |
QTest::AI_QtVersion |
9 |
QTest::AI_File |
10 |
QTest::AI_Line |
11 |
QTest::AI_Metric |
12 |
QTest::AI_Tag |
13 |
QTest::AI_Value |
14 |
QTest::AI_Iterations |
15 |
enum QTest::KeyAction
Это перечисление описывает возможные действия для обработки нажатий клавиш.
| Константа | Значение | Описание |
|---|---|---|
QTest::Press |
0 |
Клавиша нажата. |
QTest::Release |
1 |
Клавиша отпущена. |
QTest::Click |
2 |
Клавиша нажата и отпущена (щелчок). |
QTest::Shortcut |
3 |
Активна комбинация клавиш. Это значение было добавлено в Qt 5.6. |
enum QTest::LogElementType
Перечисление указывает типы сообщений в журнале тестов.
| Константа | Значение |
|---|---|
QTest::LET_Undefined |
-1 |
QTest::LET_Property |
0 |
QTest::LET_Properties |
1 |
QTest::LET_Failure |
2 |
QTest::LET_Error |
3 |
QTest::LET_TestCase |
4 |
QTest::LET_TestSuite |
5 |
QTest::LET_Benchmark |
6 |
QTest::LET_SystemError |
7 |
enum QTest::MouseAction
Это перечисление описывает возможные действия для обработки событий мыши.
| Константа | Значение | Описание |
|---|---|---|
QTest::MousePress |
0 |
Кнопка мыши нажата. |
QTest::MouseRelease |
1 |
Кнопка мыши отпущена. |
QTest::MouseClick |
2 |
Кнопка мыши нажата и отпущена (щелчок). |
QTest::MouseDClick |
3 |
Кнопка мыши дважды нажата и отпущена (двойной щелчок). |
QTest::MouseMove |
4 |
Указатель мыши перемещен. |
enum QTest::QBenchmarkMetric
Это перечисление содержит все параметры, которые можно использовать для тестирования производительности.
| Константа | Значение | Описание |
|---|---|---|
QTest::FramesPerSecond |
0 |
Кадров в секунду |
QTest::BitsPerSecond |
1 |
Битов в секунду |
QTest::BytesPerSecond |
2 |
Байтов в секунду |
QTest::WalltimeMilliseconds |
3 |
Время в миллисекундах |
QTest::WalltimeNanoseconds |
7 |
Время в наносекундах |
QTest::BytesAllocated |
8 |
Использование памяти в байтах |
QTest::Events |
6 |
Количество событий |
QTest::CPUTicks |
4 |
Время процессора |
QTest::CPUMigrations |
9 |
Перемещения процессов между ЦП |
QTest::CPUCycles |
10 |
Циклы ЦП |
QTest::RefCPUCycles |
30 |
Справочные циклы ЦП |
QTest::BusCycles |
11 |
Циклы шины |
QTest::StalledCycles |
12 |
Заблокированные циклы |
QTest::InstructionReads |
5 |
Чтение инструкций |
QTest::Instructions |
13 |
Выполненные инструкции |
QTest::BranchInstructions |
14 |
Инструкции типа ветвления |
QTest::BranchMisses |
15 |
Ветви, которые были предсказаны неверно |
QTest::CacheReferences |
16 |
Доступы к кешу любого типа |
QTest::CacheMisses |
20 |
Промахи кеша любого типа |
QTest::CacheReads |
17 |
Чтение/загрузка из кеша |
QTest::CacheReadMisses |
21 |
Промахи чтения/загрузки из кеша |
QTest::CacheWrites |
18 |
Запись/хранение в кеш |
QTest::CacheWriteMisses |
22 |
Промахи записи/хранения в кеш |
QTest::CachePrefetches |
19 |
Предварительная загрузка кеша |
QTest::CachePrefetchMisses |
23 |
Промахи предварительной загрузки кеша |
QTest::ContextSwitches |
24 |
Переключение контекста |
QTest::PageFaults |
25 |
Страницы ошибок любого типа |
QTest::MinorPageFaults |
26 |
Незначительные ошибки страниц |
QTest::MajorPageFaults |
27 |
Существенные ошибки страниц |
QTest::AlignmentFaults |
28 |
Ошибки, вызванные неправильным выравниванием |
QTest::EmulationFaults |
29 |
Ошибки, потребовавшие эмуляции программного обеспечения |
Обратите внимание, что WalltimeNanoseconds и BytesAllocated предоставляются только для использования с помощью setBenchmarkResult(), и результаты по этим метрикам не могут быть получены автоматически с помощью фреймворка QTest.
Это перечисление было введено или изменено в Qt 4.7.
END_OF_DOCUMENT_MARKERСм. также QTest::benchmarkMetricName() и QTest::benchmarkMetricUnit().
enum QTest::TestFailMode
Этот перечисление описывает режимы обработки ожидаемой ошибки макросов QVERIFY() или QCOMPARE().
| Константа | Значение | Описание |
|---|---|---|
QTest::Abort |
1 |
Прерывает выполнение теста. Используйте этот режим, когда после ожидаемой ошибки нет смысла продолжать выполнение теста. |
QTest::Continue |
2 |
Продолжает выполнение теста после ожидаемой ошибки. |
См. также QEXPECT_FAIL().
Документация функций
void QTest::addColumn(const char *name, T *dummy = nullptr)
Добавляет столбец с типом T в текущие тестовые данные. name — имя столбца. dummy — обходной путь для неисправных компиляторов и его можно проигнорировать.
Для заполнения столбца значениями можно использовать newRow(). Используйте QFETCH() для извлечения данных в реальном тесте.
Пример:
void myTestFunction_data() {
QTest::addColumn<int>("intval");
QTest::addColumn<QString>("str");
QTest::addColumn<double>("dbl");
QTest::newRow("row1") << 1 << "hello" << 1.5;
} Для добавления пользовательских типов в тестовые данные, тип должен быть зарегистрирован с помощью QMetaType через Q_DECLARE_METATYPE().
Примечание: Этот макрос может быть использован только в функции данных теста, вызываемой тестовой системой.
См. Тестирование с данными для более подробного примера.
См. также QTest::newRow(), QFETCH() и QMetaType.
QTestData &QTest::addRow(const char *format, ...)
Добавляет новую строку в текущие тестовые данные. Аргументы функции передаются в qsnprintf() для форматирования в соответствии с format. См. документацию qvsnprintf() для замечаний и ограничений.
Отформатированная строка будет отображаться в качестве имени этих тестовых данных в выходных данных теста.
Возвращает ссылку на QTestData, которая может использоваться для потоковой передачи данных.
Пример:
void myTestFunction_data()
{
QTest::addColumn<int>("input");
QTest::addColumn<QString>("output");
QTest::addRow("%d", 0) << 0 << QString("0");
QTest::addRow("%d", 1) << 1 << QString("1");
} Примечание: Эта функция может быть использована только в функции данных теста, которая вызывается тестовой системой.
См. Тестирование с данными для более подробного примера.
Эта функция была введена в Qt 5.9.
См. также addColumn() и QFETCH().
const char *QTest::benchmarkMetricName(QBenchmarkMetric metric)
Возвращает значение перечисления metric в виде символьной строки.
Эта функция была введена в Qt 4.7.
const char *QTest::benchmarkMetricUnit(QBenchmarkMetric metric)
Возвращает единицы измерения для указанного metric.
Эта функция была введена в Qt 4.7.
bool QTest::compare_ptr_helper(const volatile void *t1, const volatile void *t2, const char *actual, const char *expected, const char *file, int line)
bool QTest::compare_ptr_helper(const volatile void *t1, std::nullptr_t, const char *actual, const char *expected, const char *file, int line)
bool QTest::compare_ptr_helper(std::nullptr_t, const volatile void *t2, const char *actual, const char *expected, const char *file, int line)
QTouchDevice *QTest::createTouchDevice(QTouchDevice::DeviceType devType = QTouchDevice::TouchScreen)
Создаёт виртуальное сенсорное устройство типа devType для имитации сенсорных событий.
Устройство будет зарегистрировано в системе окон QPA и удалено автоматически при удалении QCoreApplication. Таким образом, вы, как правило, используете createTouchDevice() для инициализации члена QTouchDevice в классе вашего тестового случая и используете один и тот же экземпляр для всех тестов.
Эта функция была введена в Qt 5.8.
См. также QTest::QTouchEventSequence.
const char *QTest::currentAppName()
Возвращает имя исполняемого файла, который в данный момент выполняется.
const char *QTest::currentDataTag()
Возвращает имя текущих тестовых данных. Если у теста нет назначенных тестовых данных, функция возвращает 0.
bool QTest::currentTestFailed()
Возвращает true если текущая тестовая функция завершилась с ошибкой, в противном случае возвращает false.
const char *QTest::currentTestFunction()
Возвращает имя тестовой функции, которая в данный момент выполняется.
Пример:
void MyTestClass::cleanup()
{
if (qstrcmp(currentTestFunction(), "myDatabaseTest") == 0) {
// clean up all database connections
closeAllDatabases();
}
} void QTest::ignoreMessage(QtMsgType type, const char *message)
Игнорирует сообщения, созданные qDebug(), qInfo() или qWarning(). Если сообщение с соответствующим типом type выводится, оно будет удалено из тестового журнала. Если тест завершился, а сообщение не было выведено, в тестовый журнал добавляется ошибка теста.
Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое нужно проигнорировать, выводится дважды, вы должны дважды вызвать ignoreMessage().
Пример:
QDir dir;
QTest::ignoreMessage(QtWarningMsg, "QDir::mkdir: Empty or null file name(s)");
dir.mkdir(""); Приведённый выше пример проверяет, что QDir::mkdir() выводит правильное предупреждение при вызове с недопустимым именем файла.
void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern)
Это перегруженная функция.
Игнорирует сообщения, созданные qDebug(), qInfo() или qWarning(). Если выводится сообщение, соответствующее messagePattern и с соответствующим типом type, оно будет удалено из тестового журнала. Если тест завершился, а сообщение не было выведено, в тестовый журнал добавляется ошибка теста.
Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое нужно проигнорировать, выводится дважды, вы должны дважды вызвать ignoreMessage().
Эта функция была введена в Qt 5.3.
[static] 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().
[static] void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Имитирует нажатие key с необязательным modifier на window. Если delay больше 0, тест будет ждать delay миллисекунд перед нажатием клавиши.
Пример:
QTest::keyClick(myWindow, 'a');
Пример имитирует нажатие a на myWindow без модификаторов клавиатуры и без задержки теста.
Эта функция была введена в Qt 5.0.
См. также QTest::keyClicks().
[static] 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().
[static] 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().
[static] 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().
[static] void QTest::keyEvent(KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Отправляет событие Qt клавиши на widget с заданной клавишей key и связанным action. Необязательно, можно указать модификатор клавиатуры modifier и задержку delay (в миллисекундах) перед отправкой события.
[static] void QTest::keyEvent(KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эта функция перегружена.
Отправляет событие Qt клавиши на window с заданной клавишей key и связанным action. Необязательно, можно указать модификатор клавиатуры modifier и задержку delay (в миллисекундах) перед отправкой события.
Эта функция была добавлена в Qt 5.0.
[static] void QTest::keyEvent(KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эта функция перегружена.
Отправляет событие Qt клавиши на widget с заданным кодом ascii и связанным action. Необязательно, можно указать модификатор клавиатуры modifier и задержку delay (в миллисекундах) перед отправкой события.
[static] void QTest::keyEvent(KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эта функция перегружена.
Отправляет событие Qt клавиши на window с заданным кодом ascii и связанным action. Необязательно, можно указать модификатор клавиатуры modifier и задержку delay (в миллисекундах) перед отправкой события.
Эта функция была добавлена в Qt 5.0.
[static] 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().
[static] 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().
[static] 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().
[static] 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().
[static] 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().
[static] 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().
[static] void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эта функция перегружена.
Имитирует отпускание клавиши key с необязательным модификатором modifier на виджете widget. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.
См. также QTest::keyClick().
[static] 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().
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().
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().
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 (в миллисекундах), тест подождёт перед перемещением указателя.
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; по умолчанию — центр виджета. Если задано delay, тест подождёт указанное количество миллисекунд перед нажатием.
См. также QTest::mouseRelease() и QTest::mouseClick().
void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Эта функция перегружена.
Эмулирует нажатие кнопки мыши button с необязательным модификатором stateKey на окне window. Позиция задаётся pos; по умолчанию — центр окна. Если задано delay, тест подождёт указанное количество миллисекунд перед нажатием.
Эта функция была добавлена в Qt 5.0.
См. также QTest::mouseRelease() и QTest::mouseClick().
void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Эмулирует отпускание кнопки мыши button с необязательным модификатором modifier на виджете widget. Позиция задаётся pos; по умолчанию — центр виджета. Если задано delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
См. также QTest::mousePress() и QTest::mouseClick().
void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1)
Эта функция перегружена.
Эмулирует отпускание кнопки мыши button с необязательным модификатором stateKey на окне window. Позиция задаётся pos; по умолчанию — центр окна. Если задано delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
Эта функция была добавлена в Qt 5.0.
См. также QTest::mousePress() и QTest::mouseClick().
QTestData &QTest::newRow(const char *dataTag)
Добавляет новую строку к текущим данным теста. dataTag — имя данных теста, которое будет отображено в результатах теста. Возвращает ссылку на QTestData, которая может быть использована для ввода данных.
Пример:
void myTestFunction_data()
{
QTest::addColumn<QString>("aString");
QTest::newRow("just hello") << QString("hello");
QTest::newRow("a null string") << QString();
} Примечание: Этот макрос может использоваться только в функции данных теста, вызываемой фреймворком теста.
См. Тестирование с данными для более подробного примера.
См. также addColumn() и QFETCH().
int QTest::qExec(QObject *testObject, int argc = 0, char **argv = Q_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 аргументов вместо char**.
Эта функция была добавлена в Qt 4.4.
QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)
Извлекает директорию из ресурсов на диск. Содержимое извлекается рекурсивно в временную папку. Извлечённое содержимое удаляется автоматически, как только последнее обращение к возвращаемому значению выходит из области видимости.
dirName — имя директории для извлечения из ресурсов.
Возвращает временную директорию, куда были извлечены данные, или null в случае ошибок.
void QTest::qSleep(int ms)
Засыпает на ms миллисекунд, блокируя выполнение теста. qSleep() не обрабатывает события и делает ваш тест невосприимчивым к событиям. Связь с сетью может прерваться во время ожидания. Используйте qWait() для неблокирующего ожидания.
ms должно быть больше 0.
Примечание: Функция qSleep() вызывает либо nanosleep() на Unix, либо Sleep() на Windows, поэтому точность времени, затраченного в qSleep(), зависит от операционной системы.
Пример:
QTest::qSleep(250);
См. также qWait().
[static] void QTest::qWait(int ms)
Ожидает ms миллисекунд. Во время ожидания события будут обрабатываться, и ваш тест останется отзывчивым к событиям пользовательского интерфейса или сетевому взаимодействию.
Пример:
int i = 0;
while (myNetworkServerNotResponding() && i++ < 50)
QTest::qWait(250); Приведенный выше код будет ожидать, пока сервер сети будет отвечать в течение максимального времени приблизительно 12,5 секунд.
См. также QTest::qSleep() и QSignalSpy::wait().
[static] bool QTest::qWaitForWindowActive(QWindow *window, int timeout = 5000)
Ожидает в течение timeout миллисекунд или пока window не станет активным.
Возвращает true если window активен в течение timeout миллисекунд, в противном случае возвращает false.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowExposed() и QWindow::isActive().
[static] bool QTest::qWaitForWindowActive(QWidget *widget, int timeout = 5000)
Ожидает в течение timeout миллисекунд или пока окно widget не станет активным.
Возвращает true если окно widget активен в течение timeout миллисекунд, в противном случае возвращает false.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowExposed() и QWidget::isActiveWindow().
[static] bool QTest::qWaitForWindowExposed(QWindow *window, int timeout = 5000)
Ожидает в течение timeout миллисекунд или пока window не станет видимым. Возвращает true если window будет видимым в течение timeout миллисекунд, в противном случае возвращает false.
Это в основном полезно для асинхронных систем, таких как X11, где окно будет отображаться на экране некоторое время после того, как ему было предложено отобразиться.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowActive() и QWindow::isExposed().
[static] bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
Ожидает в течение timeout миллисекунд или пока окно widget не станет видимым. Возвращает true если окно widget будет видимым в течение timeout миллисекунд, в противном случае возвращает false.
Это в основном полезно для асинхронных систем, таких как X11, где окно будет отображаться на экране некоторое время после того, как ему было предложено отобразиться.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowActive().
void QTest::setBenchmarkResult(qreal result, QBenchmarkMetric metric)
Устанавливает результат бенчмарка для этой тестовой функции в result.
Используйте эту функцию, если вы хотите сообщить результаты бенчмарка без использования макроса QBENCHMARK. Используйте metric для указания того, как Qt Test должен интерпретировать результаты.
Контекст результата будет именем тестовой функции и любыми тегами данных из функции _data. Эта функция может быть вызвана только один раз в каждой тестовой функции, последующие вызовы заменят ранее сообщённые результаты.
Обратите внимание, что аргумент командной строки -iterations не влияет на тестовые функции без макроса QBENCHMARK.
Эта функция была добавлена в Qt 4.7.
char *QTest::toHexRepresentation(const char *ba, int length)
Возвращает указатель на строку, которая представляет строку ba как последовательность шестнадцатеричных символов, разделённых пробелами. Если входная строка слишком длинная, она усекается. Усечение показано в возвращаемой строке как многоточие в конце.
length — длина строки ba.
char *QTest::toPrettyCString(const char *unicode, int length)
char *QTest::toPrettyUnicode(const ushort *unicode, int length)
char *QTest::toString(const QUuid &uuid)
char *QTest::toString(const QLatin1String &string)
Это перегруженная функция.
Возвращает текстовое представление заданной строки.
char *QTest::toString(const QByteArray &ba)
Это перегруженная функция.
Возвращает текстовое представление массива байтов ba.
См. также QTest::toHexRepresentation().
char *QTest::toString(const QTime &time)
Это перегруженная функция.
Возвращает текстовое представление заданного времени.
char *QTest::toString(const QDate &date)
Это перегруженная функция.
Возвращает текстовое представление заданной даты.
char *QTest::toString(const QDateTime &dateTime)
Это перегруженная функция.
Возвращает текстовое представление даты и времени, заданных dateTime.
char *QTest::toString(const QChar &character)
Это перегруженная функция.
Возвращает текстовое представление заданного символа.
char *QTest::toString(const QPoint &point)
Это перегруженная функция.
Возвращает текстовое представление заданной точки.
char *QTest::toString(const QSize &size)
Это перегруженная функция.
Возвращает текстовое представление заданного размера.
char *QTest::toString(const QRect &rectangle)
Это перегруженный метод.
Возвращает текстовое представление заданного прямоугольника rectangle.
char *QTest::toString(const QPointF &point)
Это перегруженный метод.
Возвращает текстовое представление заданной точки point.
char *QTest::toString(const QSizeF &size)
Это перегруженный метод.
Возвращает текстовое представление заданного размера size.
char *QTest::toString(const QRectF &rectangle)
Это перегруженный метод.
Возвращает текстовое представление заданного прямоугольника rectangle.
char *QTest::toString(const QUrl &url)
Это перегруженный метод.
Возвращает текстовое представление заданного URL-адреса url.
Данная функция была добавлена в Qt 4.4.
char *QTest::toString(const QString &string)
Это перегруженный метод.
Возвращает текстовое представление заданной строки string.
char *QTest::toString(const QVariant &variant)
Это перегруженный метод.
Возвращает текстовое представление заданного значения variant.
char *QTest::toString(std::nullptr_t)
Это перегруженный метод.
Возвращает строку, содержащую nullptr.
Данная функция была добавлена в Qt 5.8.
char *QTest::toString(QSizePolicy::Policy p)
Это перегруженный метод.
Возвращает текстовое представление политики p.
Данная функция была добавлена в Qt 5.5.
char *QTest::toString(QSizePolicy::ControlTypes cts)
Это перегруженный метод.
Возвращает текстовое представление типов управления cts.
Данная функция была добавлена в Qt 5.5.
char *QTest::toString(QSizePolicy::ControlType ct)
Это перегруженный метод.
Возвращает текстовое представление типа управления ct.
Данная функция была добавлена в Qt 5.5.
char *QTest::toString(QSizePolicy sp)
Это перегруженный метод.
Возвращает текстовое представление политики размера sp.
Данная функция была добавлена в Qt 5.5.
char *QTest::toString(const T &value)
Возвращает текстовое представление значения value. Эта функция используется функцией QCOMPARE() для вывода подробной информации в случае неудачи теста.
Вы можете добавить специализации или перегрузки этой функции в свой тест, чтобы включить вывод подробной информации.
Примечание: Начиная с Qt 5.5, вы должны отдавать предпочтение предоставлению функции toString() в пространстве имен типа, а не специализации этого шаблона. Если вашему коду необходимо продолжить работу с QTestLib из Qt 5.4 или более ранних версий, вам необходимо продолжить использование специализации.
Примечание: Вызывающий метод toString() должен удалить возвращаемые данные с помощью delete[]. Ваша реализация должна возвращать строку, созданную с помощью new[] или qstrdup(). Самый простой способ сделать это — создать QByteArray или QString и вызвать QTest::toString() на нём (см. второй пример ниже).
Пример специализации (Qt ≤ 5.4):
namespace QTest {
template<>
char *toString(const MyPoint &point)
{
QByteArray ba = "MyPoint(";
ba += QByteArray::number(point.x()) + ", " + QByteArray::number(point.y());
ba += ')';
return qstrdup(ba.data());
}
} Приведённый выше пример определяет специализацию toString() для класса с именем MyPoint. Всякий раз, когда сравнение двух экземпляров MyPoint терпит неудачу, QCOMPARE() будет вызывать эту функцию для вывода содержимого MyPoint в журнал теста.
Тот же пример, но с перегрузкой (Qt ≥ 5.5):
namespace MyNamespace {
char *toString(const MyPoint &point)
{
// bring QTest::toString overloads into scope:
using QTest::toString;
// delegate char* handling to QTest::toString(QByteArray):
return toString("MyPoint(" +
QByteArray::number(point.x()) + ", " +
QByteArray::number(point.y()) + ')');
}
} См. также QCOMPARE().
QTouchEventSequence QTest::touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit = true)
Создаёт и возвращает QTouchEventSequence для устройства device, чтобы смоделировать события для widget.
При добавлении сенсорных событий в последовательность, widget также будет использоваться для преобразования предоставленных координат в экранные координаты, если в соответствующих вызовах press(), move() и т.д. не указан другой виджет.
Сенсорные события добавляются в систему событий при вызове деструктора QTouchEventSequence (т.е. когда объект выходит из области видимости), если autoCommit не установлено в false. Если autoCommit равно false, необходимо вручную вызвать commit().
QTouchEventSequence QTest::touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit = true)
Создаёт и возвращает QTouchEventSequence для устройства device, чтобы смоделировать события для window.
При добавлении сенсорных событий в последовательность, window также будет использоваться для преобразования предоставленных координат в экранные координаты, если в соответствующих вызовах press(), move() и т.д. не указан другой виджет.
Сенсорные события добавляются в систему событий при вызове деструктора QTouchEventSequence (т.е. когда объект выходит из области видимости), если autoCommit не установлено в false. Если autoCommit равно false, необходимо вручную вызвать commit().
Данная функция была добавлена в 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», если оно слишком короткое, чтобы быть измерено выбранным бэкендом. (Используйте)
Эта функция была представлена в Qt 4.6.
См. также Создание бенчмарка и Создание бенчмарка.
QCOMPARE(actual, expected)
Макрос QCOMPARE сравнивает значение actual со значением expected с помощью оператора равенства. Если actual и expected идентичны, выполнение продолжается. Если нет, в журнале тестов записывается ошибка, и дальнейшее выполнение теста прекращается.
В случае сравнения чисел с плавающей точкой (float и double) используется qFuzzyCompare(). Это означает, что сравнение с 0, вероятно, завершится ошибкой. Одним из решений является сравнение с 1 и добавление 1 к результату.
QCOMPARE пытается вывести содержимое значений в случае ошибки сравнения, чтобы из журнала тестов было понятно, почему сравнение завершилось ошибкой.
QCOMPARE очень строго относится к типам данных. Как actual, так и expected должны быть одного типа; в противном случае тест не будет скомпилирован. Это предотвращает появление неопределенного поведения, которое обычно возникает, когда компилятор неявно преобразует аргумент.
Для собственных классов можно использовать QTest::toString() для форматирования значений для вывода в журнал тестов.
Примечание: Этот макрос можно использовать только в функции теста, вызываемой фреймворком тестирования.
Пример:
QCOMPARE(QString("hello").toUpper(), QString("HELLO")); См. также QVERIFY(), QTRY_COMPARE() и QTest::toString().
QEXPECT_FAIL(dataIndex, comment, mode)
Макрос QEXPECT_FAIL() отмечает следующий QCOMPARE() или QVERIFY() как ожидаемую ошибку. Вместо добавления ошибки в журнал тестов, ожидаемая ошибка будет отражена.
Если QVERIFY() или QCOMPARE() помечены как ожидаемая ошибка, но вместо этого проходят, в журнал тестов записывается неожидаемый проход (XPASS).
Параметр dataIndex описывает, для какой записи в данных теста ожидается ошибка. Используйте пустую строку ("") если ошибка ожидается для всех записей или если данные теста отсутствуют.
comment будет добавлен к журналу тестов для ожидаемой ошибки.
mode — это QTest::TestFailMode и определяет, будет ли тест продолжать выполнение или нет.
Примечание: Этот макрос можно использовать только в функции теста, вызываемой фреймворком тестирования.
Пример 1:
QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43); В примере выше, ожидаемая ошибка будет записана в выходные данные теста, если переменная i не равна 42. Если переменная i равна 42, вместо этого будет записан неожидаемый проход. QEXPECT_FAIL() не влияет на второе утверждение QCOMPARE() в примере.
Пример 2:
QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42); Функция теста выше не будет продолжать выполнение для записи данных теста data27.
См. также QTest::TestFailMode, QVERIFY() и QCOMPARE().
QFAIL(message)
Этот макрос можно использовать для принудительного завершения теста с ошибкой. Тест прекращает выполнение, и сообщение об ошибке message добавляется в журнал тестов.
Примечание: Этот макрос можно использовать только в функции теста, вызываемой фреймворком тестирования.
Пример:
if (sizeof(int) != 4)
QFAIL("This test has not been ported to this platform yet."); QFETCH(type, name)
Макрос fetch создает локальную переменную с именем name типа type в стеке. name должен соответствовать имени элемента из данных теста. Если такого элемента нет, тест завершится ошибкой.
Предположим, тест имеет следующие данные:
void TestQString::toInt_data()
{
QTest::addColumn<QString>("aString");
QTest::addColumn<int>("expected");
QTest::newRow("positive value") << "42" << 42;
QTest::newRow("negative value") << "-42" << -42;
QTest::newRow("zero") << "0" << 0;
} Данные теста содержат два элемента: QString с именем aString и целое число с именем expected. Для извлечения этих значений в самом тесте:
void TestQString::toInt()
{
QFETCH(QString, aString);
QFETCH(int, expected);
QCOMPARE(aString.toInt(), expected);
} aString и expected — переменные в стеке, инициализированные текущими данными теста.
Примечание: Этот макрос можно использовать только в функции теста, вызываемой фреймворком тестирования. Функция теста должна иметь функцию _data.
QFINDTESTDATA(filename)
Возвращает QString для файла данных теста, на который ссылается filename, или пустой QString, если файл данных теста не был найден.
Этот макрос позволяет тесту загружать данные из внешнего файла без жёсткого кодирования абсолютного имени файла в тест или использования относительных путей, которые могут быть небезопасными.
Возвращаемый путь будет первым путём из следующего списка, который разрешается до существующего файла или каталога:
- filename, относительный к QCoreApplication::applicationDirPath() (только если был создан объект QCoreApplication или QApplication).
- filename, относительный к стандартному каталогу установки теста (QLibraryInfo::TestsPath с добавленным в нижнем регистре именем тестового случая).
- filename, относительный к каталогу, содержащему исходный файл, из которого вызван QFINDTESTDATA.
Если указанный файл/каталог не существует ни в одном из этих местоположений, в журнал тестов выводится предупреждение.
Например, в этом коде:
// Source: /home/user/sources/myxmlparser/tests/tst_myxmlparser/tst_myxmlparser.cpp
// Build: /home/user/build/myxmlparser/tests/tst_myxmlparser
// Qt: /usr/local/Qt-5.0.0
void tst_MyXmlParser::parse()
{
MyXmlParser parser;
QString input = QFINDTESTDATA("testxml/simple1.xml");
QVERIFY(parser.parse(input));
} Файл данных теста будет разрешен как первый существующий файл из:
/home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml/usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml/home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
Это позволяет тесту найти свои данные независимо от того, был ли тест установлен и совпадает ли дерево сборки теста с деревом исходного кода теста.
Примечание: надёжное определение данных теста из каталога исходного кода требует либо использования qmake, либо определения макроса QT_TESTCASE_BUILDDIR, чтобы он указывает на рабочую директорию, из которой вызывается компилятор, или указания только абсолютных путей к исходным файлам в компилятор. В противном случае абсолютный путь к каталогу исходного кода определить нельзя.
Примечание: Для тестов, использующих макрос QTEST_APPLESS_MAIN() для создания функции main(), QFINDTESTDATA не будет пытаться найти данные теста, относительные к QCoreApplication::applicationDirPath(). На практике это означает, что тесты, использующие QTEST_APPLESS_MAIN(), не смогут найти свои данные теста, если они выполняются из тени дерева сборки.
Эта функция была представлена в Qt 5.0.
QSKIP(description)
Если вызывается из функции теста, макрос QSKIP() останавливает выполнение теста без добавления ошибки в журнал тестов. Его можно использовать для пропуска тестов, которые не имеют смысла в текущей конфигурации. Текст description добавляется в журнал тестов и должен содержать объяснение, почему тест не мог быть выполнен.
Если тест является ориентированным на данные, каждый вызов QSKIP() пропускает только текущую строку данных теста, поэтому безусловный вызов QSKIP() генерирует одно сообщение о пропуске в журнале тестов для каждой строки данных теста.
Если вызывается из функции _data, макрос QSKIP() остановит выполнение функции _data и предотвратит выполнение связанной функции теста.
Если вызывается из initTestCase() или initTestCase_data(), макрос QSKIP() пропустит все функции теста и _data.
Примечание: Этот макрос можно использовать только в функции теста или функции _data, которые вызываются фреймворком тестирования.
Пример:
if (!QSqlDatabase::drivers().contains("SQLITE"))
QSKIP("This test requires the SQLITE database driver"); QTEST(actual, testElement)
QTEST() — это удобный макрос для QCOMPARE(), который сравнивает значение actual с элементом testElement из данных теста. Если такого элемента нет, тест завершится ошибкой.
Помимо этого, QTEST() ведет себя точно так же, как QCOMPARE().
Вместо:
QFETCH(QString, myString);
QCOMPARE(QString("hello").toUpper(), myString); можно написать:
QTEST(QString("hello").toUpper(), "myString"); См. также QCOMPARE().
QTEST_APPLESS_MAIN(TestClass)
Реализует функцию main(), которая выполняет все тесты в TestClass.
Поведение аналогично QTEST_MAIN(), но не создает объект QApplication. Используйте этот макрос для очень простых автономных тестов без графического интерфейса.
См. также QTEST_MAIN().
QTEST_GUILESS_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект QCoreApplication и TestClass, и выполняет все тесты в определенном порядке. Используйте этот макрос для построения автономных исполняемых файлов.
Поведение аналогично QTEST_MAIN(), но создаёт объект QCoreApplication вместо объекта QApplication. Используйте этот макрос, если ваш тестовый случай не нуждается в функциональности QApplication, но цикл событий всё же необходим.
Эта функция была представлена в Qt 5.0.
См. также QTEST_MAIN().
QTEST_MAIN(TestClass)
Реализует функцию main(), которая создаёт экземпляр объекта приложения и объекта TestClass, и выполняет все тесты в порядке их определения. Используйте эту макрос для создания автономных исполняемых файлов.
Если QT_WIDGETS_LIB определено, объект приложения будет QApplication, если QT_GUI_LIB определено, объект приложения будет QGuiApplication, в противном случае это будет QCoreApplication. Если используется qmake и конфигурация включает QT += widgets, то QT_WIDGETS_LIB будет определено автоматически. Аналогично, если используется qmake и конфигурация включает QT += gui, то QT_GUI_LIB будет определено автоматически.
Примечание: На платформах, где навигация по клавиатуре включена по умолчанию, эта макрос принудительно выключит её, если QT_WIDGETS_LIB определено. Это сделано для упрощения использования событий клавиш при написании автотестов. Если вы хотите написать тестовый случай, использующий навигацию по клавиатуре, вы должны включить её в функциях initTestCase() или init() своего тестового случая, вызвав QApplication::setNavigationMode().
Пример:
class TestQString: public QObject { ... };
QTEST_MAIN(TestQString) См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec(), и QApplication::setNavigationMode().
QTRY_COMPARE(actual, expected)
Производит сравнение значений actual и expected, вызывая QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), и QTRY_VERIFY().
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
Макрос QTRY_COMPARE_WITH_TIMEOUT() похож на QCOMPARE(), но выполняет сравнение значений actual и expected многократно, пока значения не станут равными или не истечёт timeout (в миллисекундах). Между каждым сравнением обрабатываются события. Если таймаут истечёт, в журнале тестов будет записана ошибка, и дальнейшее выполнение теста не произойдёт.
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), и QTRY_VERIFY().
QTRY_VERIFY2(condition, message)
Проверяет condition, вызывая QTRY_VERIFY2_WITH_TIMEOUT() с таймаутом в пять секунд. Если condition по-прежнему ложно, выводится message. message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData());
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Эта функция была добавлена в Qt 5.6.
См. также QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QTRY_VERIFY(condition)
Проверяет condition, вызывая QTRY_VERIFY_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
Макрос QTRY_VERIFY2_WITH_TIMEOUT похож на QTRY_VERIFY_WITH_TIMEOUT(), за исключением того, что он выводит подробное сообщение message, когда condition по-прежнему ложно после истечения указанного 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().
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().
QVERIFY2(condition, message)
Макрос QVERIFY2() ведёт себя точно так же, как QVERIFY(), за исключением того, что он выводит подробное сообщение message, когда condition ложно. message — обычная строка C.
Пример:
QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occurred.");
См. также QVERIFY() и QCOMPARE().
QVERIFY(condition)
Макрос QVERIFY() проверяет, истинно ли condition. Если истинно, выполнение продолжается. Если нет, в журнале тестов записывается ошибка, и дальнейшее выполнение теста не произойдёт.
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Пример:
QVERIFY(1 + 1 == 2);
См. также QCOMPARE() и QTRY_VERIFY().
QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)
Макрос QVERIFY_EXCEPTION_THROWN выполняет выражение expression и пытается перехватить исключение, сгенерированное выражением. Если выражение expression генерирует исключение, и его тип совпадает с exceptiontype, или тип exceptiontype подменяем типом сгенерированного исключения (т.е., обычно тип сгенерированного исключения публично выведен от exceptiontype), то выполнение будет продолжено. Если тип сгенерированного исключения не подменяем типом exceptiontype, или expression вообще не генерирует исключения, то в журнале тестов будет зафиксирована ошибка, и выполнение теста прекратится.
Примечание: Эта макрос может использоваться только в тестовой функции, вызываемой тестовой системой.
Эта функция была добавлена в Qt 5.3.
QWARN(message)
Добавляет message в журнал тестов как предупреждение. Эту макрос можно использовать в любом месте ваших тестов.
Примечание: Эта функция безопасна для многопоточных задач.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qtest.html