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