Пространство имен QTest
Пространство имен QTest содержит все функции и объявления, связанные с Qt Test. Подробнее...
| Заголовок: | #include <QTest> |
| qmake: | QT += testlib |
Классы
| класс | Последовательность событий касания QTouchEvent |
Типы
| перечисление | ИндексАтрибута { AI_Undefined, AI_Name, AI_Result, AI_Tests, AI_Failures, …, AI_Iterations } |
| перечисление | ДействиеКлавиши { Нажатие, Отпускание, Щелчок, СочетаниеКлавиш } |
| перечисление | ТипЭлементаЛога { LET_Undefined, LET_Property, LET_Properties, LET_Failure, LET_Error, …, LET_SystemError } |
| перечисление | ДействиеМыши { НажатиеМыши, ОтпусканиеМыши, ЩелчокМыши, ДвойнойЩелчокМыши, ПеремещениеМыши } |
| перечисление | МетрикаИзмеренияQBenchmark { КадровВСекунду, БитовВСекунду, БайтовВСекунду, МиллисекундыСтенныхЧасов, НаносекундыСтенныхЧасов, …, ОшибкиЭмуляции } |
| перечисление | РежимОшибкиТеста { Прервать, Продолжить } |
Функции
| void | addColumn(const char *name, T *dummy = 0) |
| QTestData & | addRow(const char *format, ...) |
| const char * | имяМетрикиДляИзмеренияПроизводительности(QTest::QBenchmarkMetric metric) |
| const char * | единицаИзмеренияМетрикиДляИзмеренияПроизводительности(QTest::QBenchmarkMetric metric) |
| QTouchDevice * | создатьУстройствоВводаСенсорногоЭкрана(QTouchDevice::DeviceType devType = QTouchDevice::TouchScreen) |
| const char * | текущееИмяПриложения() |
| const char * | текущаяМеткаДанных() |
| bool | текущийТестНеУдался() |
| const char * | текущаяФункцияТеста() |
| void | пропуститьСообщение(QtMsgType type, const char *message) |
| void | пропуститьСообщение(QtMsgType type, const QRegularExpression &messagePattern) |
| void | нажатьКнопку(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКнопку(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКнопку(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКнопку(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьПоследовательностьКлавиш(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | событиеКлавиши(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | событиеКлавиши(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | событиеКлавиши(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | событиеКлавиши(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКлавишу(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКлавишу(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКлавишу(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | нажатьКлавишу(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | отпуститьКлавишу(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | отпуститьКлавишу(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | отпуститьКлавишу(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | отпуститьКлавишу(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1) |
| void | последовательностьКлавиш(QWindow *window, const QKeySequence &keySequence) |
| void | последовательностьКлавиш(QWidget *widget, const QKeySequence &keySequence) |
| void | нажатиеМыши(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1) |
| void | нажатиеМыши(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0, QPoint pos = QPoint(), int delay = -1) |
| void | двойнойЩелкатьМышью(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1) |
| void | двойнойЩелкатьМышью(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0, QPoint pos = QPoint(), int delay = -1) |
| void | передвижениеМыши(QWidget *widget, QPoint pos = QPoint(), int delay = -1) |
| void | передвижениеМыши(QWindow *window, QPoint pos = QPoint(), int delay = -1) |
| void | нажатиеКнопкиМыши(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1) |
| void | нажатиеКнопкиМыши(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0, QPoint pos = QPoint(), int delay = -1) |
| void | отпуститьКнопкуМыши(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1) |
| void | отпуститьКнопкуМыши(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0, QPoint pos = QPoint(), int delay = -1) |
| QTestData & | новаяСтрока(const char *dataTag) |
| int | qExec(QObject *testObject, int argc = 0, char **argv = nullptr) |
| int | qExec(QObject *testObject, const QStringList &arguments) |
| QSharedPointer<QTemporaryDir> | qИзвлечьДанныеДляТеста(const QString &dirName) |
| void | qОтложить(int ms) |
| void | qПодождать(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::ControlTypes cts) |
| char * | toString(QSizePolicy::ControlType ct) |
| char * | toString(QSizePolicy sp) |
| char * | toString(const std::pair<T1, T2> &pair) |
| char * | toString(const std::tuple<Types...> &tuple) |
| char * | toString(const QStringView &string) |
| char * | toString(const QString &string) |
| char * | toString(const QLatin1String &string) |
| char * | toString(const QByteArray &ba) |
| char * | toString(const QTime &time) |
| char * | toString(const QDate &date) |
| char * | toString(const QDateTime &dateTime) |
| char * | toString(const QCborError &c) |
| char * | toString(const QChar &character) |
| char * | toString(const QPoint &point) |
| char * | toString(const QSize &size) |
| char * | toString(const QRect &rectangle) |
| char * | toString(const QPointF &point) |
| char * | toString(const QSizeF &size) |
| char * | toString(const QRectF &rectangle) |
| char * | toString(const QUrl &url) |
| char * | toString(const QUuid &uuid) |
| char * | toString(const QVariant &variant) |
| char * | toString(std::nullptr_t) |
| char * | toString(const QVector2D &v) |
| char * | toString(const QVector3D &v) |
| char * | toString(const QVector4D &v) |
| char * | toString(QSizePolicy::Policy p) |
| 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) | |
| QFETCH_GLOBAL(type, name) | |
| QFINDTESTDATA(filename) | |
| QSKIP(description) | |
| QTEST(actual, testElement) | |
| QTEST_APPLESS_MAIN(TestClass) | |
| QTEST_GUILESS_MAIN(TestClass) | |
| QTEST_MAIN(TestClass) | |
| QTRY_COMPARE(actual, expected) | |
| QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout) | |
| QTRY_VERIFY2(condition, message) | |
| QTRY_VERIFY(condition) | |
| QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout) | |
| QTRY_VERIFY_WITH_TIMEOUT(condition, timeout) | |
| QVERIFY2(condition, message) | |
| QVERIFY(condition) | |
| QVERIFY_EXCEPTION_THROWN(expression, exceptiontype) | |
| QWARN(message) |
Подробное описание
См. Обзор Qt Test для получения информации о написании модульных тестов.
Классы
class QTouchEventSequence
Класс QTouchEventSequence используется для моделирования последовательности событий касания. Подробнее...
Документация по типам
enum QTest::AttributeIndex
Этот перечисление нумерует различные тесты.
| Постоянная | Значение |
|---|---|
QTest::AI_Undefined |
-1 |
QTest::AI_Name |
0 |
QTest::AI_Result |
1 |
QTest::AI_Tests |
2 |
QTest::AI_Failures |
3 |
QTest::AI_Errors |
4 |
QTest::AI_Type |
5 |
QTest::AI_Description |
6 |
QTest::AI_PropertyValue |
7 |
QTest::AI_QTestVersion |
8 |
QTest::AI_QtVersion |
9 |
QTest::AI_File |
10 |
QTest::AI_Line |
11 |
QTest::AI_Metric |
12 |
QTest::AI_Tag |
13 |
QTest::AI_Value |
14 |
QTest::AI_Iterations |
15 |
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
Это перечисление содержит все, что можно измерять с помощью QBenchmark.
| Постоянная | Значение | Описание |
|---|---|---|
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().
Документация функций
шаблон <typename T> void QTest::addColumn(const char *name, T *dummy = 0)
Добавляет столбец типа T в текущие данные теста. name — имя столбца. dummy — обходной путь для некорректных компиляторов и может быть проигнорирован.
Для заполнения столбца значениями можно использовать newRow(). Используйте QFETCH() для извлечения данных в фактическом тесте.
Пример:
QTest::addColumn<int>("intval");
QTest::addColumn<QString>("str");
QTest::addColumn<double>("dbl");
QTest::newRow("row1") << 1 << "hello" << 1.5; Для добавления пользовательских типов в тестовые данные, тип необходимо зарегистрировать в QMetaType с помощью Q_DECLARE_METATYPE().
Примечание: Этот макрос может быть использован только в функции данных теста, вызываемой тестовым фреймворком.
См. Data Driven Testing для более подробного примера.
См. также QTest::newRow(), QFETCH() и QMetaType.
QTestData &QTest::addRow(const char *format, ...)
Добавляет новую строку в текущие данные теста. Аргументы функции передаются в qsnprintf() для форматирования в соответствии с format. См. документацию qvsnprintf() для замечаний и ограничений.
Отформатированная строка отобразится как имя этих тестовых данных в выводе теста.
Возвращает ссылку на QTestData, которая может быть использована для передачи данных.
Пример:
QTest::addColumn<int>("input");
QTest::addColumn<QString>("output");
QTest::addRow("%d", 0) << 0 << QString("0");
QTest::addRow("%d", 1) << 1 << QString("1"); Примечание: Эта функция может быть использована только в функции данных теста, вызываемой тестовым фреймворком.
См. Data Driven Testing для более подробного примера.
Эта функция была введена в Qt 5.9.
См. также addColumn() и QFETCH().
const char *QTest::benchmarkMetricName(QTest::QBenchmarkMetric metric)
Возвращает значение перечисления metric в виде строки.
Эта функция была введена в Qt 4.7.
const char *QTest::benchmarkMetricUnit(QTest::QBenchmarkMetric metric)
Возвращает единицы измерения для заданной метрики metric.
Эта функция была введена в Qt 4.7.
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(QTest::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 = 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().
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().
void QTest::keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Эмулирует нажатие клавиши key с необязательными modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.
Пример:
QWidget myWindow; QTest::keyClick(&myWindow, Qt::Key_Tab);
В примере выше эмулируется нажатие клавиши a на myWindow без модификаторов и без задержки.
Функция была добавлена в Qt 5.0.
См. также QTest::keyClicks().
void QTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Эмулирует нажатие клавиши key с необязательными modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.
Пример:
QTest::keyClick(myWidget, 'a');
В примере выше эмулируется нажатие клавиши a на myWidget без модификаторов и без задержки.
См. также QTest::keyClicks().
void QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эмулирует нажатие последовательности клавиш sequence на widget. Необязательно можно указать модификатор клавиш и задержку (в миллисекундах) теста перед каждым нажатием клавиши.
Пример:
QTest::keyClicks(myWidget, "hello world");
В примере выше эмулируется нажатие последовательности клавиш, представляющих "hello world", на myWidget без модификаторов и без задержки.
См. также QTest::keyClick().
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Отправляет событие Qt для клавиши key на widget со заданным action. Необязательно можно указать модификатор клавиш и задержку (в миллисекундах) теста перед отправкой события.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Отправляет событие Qt для клавиши ascii на window со заданным action. Необязательно можно указать модификатор клавиш и задержку (в миллисекундах) теста перед отправкой события.
Функция была добавлена в Qt 5.0.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Отправляет событие Qt для клавиши key на window со заданным action. Необязательно можно указать модификатор клавиш и задержку (в миллисекундах) теста перед отправкой события.
Функция была добавлена в Qt 5.0.
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженная функция.
Отправляет событие Qt для клавиши ascii на widget со заданным action. Необязательно можно указать модификатор клавиш и задержку (в миллисекундах) теста перед отправкой события.
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().
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().
void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженный метод.
Эмулирует нажатие key с необязательным modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент вы должны отпустить клавишу с помощью keyRelease().
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженный метод.
Эмулирует нажатие key с необязательным modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент вы должны отпустить клавишу с помощью keyRelease().
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Эмулирует отпускание key с необязательным modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед отпусканием клавиши.
См. также QTest::keyPress() и QTest::keyClick().
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::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженный метод.
Эмулирует отпускание key с необязательным modifier на window. Если delay больше 0, тест подождёт delay миллисекунд перед отпусканием клавиши.
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyPress() и QTest::keyClick().
void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1)
Это перегруженный метод.
Эмулирует отпускание key с необязательным modifier на widget. Если delay больше 0, тест подождёт delay миллисекунд перед отпусканием клавиши.
См. также QTest::keyClick().
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 = 0, 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 = 0, 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 = 0, QPoint pos = QPoint(), int delay = -1)
Эмулирует двойной щелчок мышью по button с необязательным modifier на widget. Позиция щелчка определяется pos; по умолчанию — центр виджета. Если указано delay, тест подождёт заданное количество миллисекунд до каждого нажатия и отпускания.
См. также QTest::mouseClick().
void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0, 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 = 0, 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 = 0, 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 = 0, 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 = 0, 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 MyTestClass::addSingleStringRows()
{
QTest::addColumn<QString>("aString");
QTest::newRow("just hello") << QString("hello");
QTest::newRow("a null string") << QString();
} Примечание: Этот макрос может быть использован только в функции данных теста, вызываемой тестовым фреймворком.
См. Тестирование с данными для более подробного примера.
См. также addColumn() и QFETCH().
int QTest::qExec(QObject *testObject, int argc = 0, char **argv = nullptr)
Выполняет тесты, объявленные в testObject. Кроме того, выполняются закрытые слоты initTestCase(), cleanupTestCase(), init() и cleanup(), если они существуют. См. Создание теста для получения более подробной информации.
Необязательно, можно предоставить аргументы командной строки argc и argv. Список распознаваемых аргументов см. в Аргументы командной строки Qt Test.
Следующий пример запустит все тесты в MyTestObject:
MyTestObject test1; QTest::qExec(&test1);
Функция возвращает 0, если тесты не завершились ошибкой, или значение отличное от 0, если один или более тестов завершились ошибкой или в случае необработанных исключений. (Пропущенные тесты не влияют на возвращаемое значение.)
Для автономных тестовых приложений можно использовать удобный макрос QTEST_MAIN(), для объявления функции main(), которая анализирует аргументы командной строки и выполняет тесты, избегая необходимости явного вызова этой функции.
Возвращаемое значение этой функции также является кодом завершения тестового приложения при использовании макроса QTEST_MAIN().
Для автономных тестовых приложений эта функция не должна вызываться более одного раза, так как параметры командной строки для ведения протокола выходных данных тестов в файлы и выполнения отдельных тестовых функций будут работать некорректно.
Примечание: Эта функция не является реентерабельной, только один тест может выполняться за раз. Тест, который был выполнен с помощью qExec(), не может запустить другой тест через qExec(), и потоки не могут вызывать qExec() одновременно.
Если вы программно создали аргументы, а не получили их из аргументов в main(), вероятно, вам будет интересно использовать QTest::qExec(QObject *, const QStringList &), так как она безопасна для Unicode.
См. также QTEST_MAIN().
int QTest::qExec(QObject *testObject, const QStringList &arguments)
Это перегруженный метод.
Ведёт себя идентично qExec(QObject *, int, char**), но принимает QStringList arguments вместо char** списка.
Этот метод был введён в 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().
template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout = 5000)
Ожидает timeout миллисекунд или до тех пор, пока predicate не вернёт true.
Возвращает true, если predicate вернуло true в какой-то момент, иначе возвращает false.
Пример:
Приведенный выше код будет ждать, пока объект не станет готовым, в течение максимум трёх секунд.
Этот метод был введён в 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, где окно будет отображено на экране некоторое время после того, как ему будет сказано отобразиться на экране.
Обратите внимание, что окно, которое отображено на экране, может всё ещё не считаться видимым, если область клиенты окна полностью закрыта другими окнами или если окно по другим причинам не отображается. В этом случае функция ожидания завершится с истечением времени.
Эта функция была введена в 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.
template <typename T> char *QTest::toString(const T &value)
Возвращает текстовое представление value. Эта функция используется функцией QCOMPARE() для вывода подробной информации в случае неудачи теста.
Вы можете добавить специализации или перегрузки этой функции в свой тест, чтобы включить подробный вывод.
Примечание: Начиная с Qt 5.5, следует предпочитать предоставление функции toString() в пространстве имён типа вместо специализации этого шаблона. Если ваш код должен продолжать работать с QTestLib из Qt 5.4 или более ранней версии, вам нужно продолжить использование специализации.
Примечание: Вызывающий код toString() должен удалить возвращённые данные с помощью delete[]. Ваша реализация должна возвращать строку, созданную с помощью new[] или qstrdup(). Самый простой способ сделать это — создать QByteArray или QString и вызвать QTest::toString() на нём (см. второй пример ниже).
Пример специализации (Qt ≤ 5.4):
namespace QTest {
template<>
char *toString(const MyPoint &point)
{
const QByteArray ba("MyPoint("
+ QByteArray::number(point.x()) + ", "
+ QByteArray::number(point.y()) + ')');
return qstrdup(ba.data());
}
} Приведённый выше пример определяет специализацию toString() для класса под названием MyPoint. Всякий раз, когда сравнение двух экземпляров MyPoint завершается неудачно, QCOMPARE() вызовет эту функцию для вывода содержимого MyPoint в журнал тестов.
Тот же пример, но с перегрузкой (Qt ≥ 5.5):
namespace {
char *toString(const MyPoint &point)
{
return QTest::toString("MyPoint(" +
QByteArray::number(point.x()) + ", " +
QByteArray::number(point.y()) + ')');
}
} См. также QCOMPARE().
template <typename T1, typename T2> char *QTest::toString(const QPair<T1, T2> &pair)
Это перегруженная функция.
Возвращает текстовое представление pair.
Эта функция была введена в Qt 5.11.
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.
template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)
Это перегруженная функция.
Возвращает текстовое представление pair.
Эта функция была введена в Qt 5.11.
template <typename Types> 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.
Этот метод был введён в Qt 4.4.
char *QTest::toString(const QUuid &uuid)
Это перегруженный метод.
Возвращает текстовое представление заданного uuid.
Этот метод был введён в Qt 5.11.
char *QTest::toString(const QVariant &variant)
Это перегруженный метод.
Возвращает текстовое представление заданного variant.
char *QTest::toString(std::nullptr_t)
Это перегруженный метод.
Возвращает строку, содержащую nullptr.
Этот метод был введён в Qt 5.8.
char *QTest::toString(const QVector2D &v)
Это перегруженный метод.
Возвращает текстовое представление двумерного вектора v.
Этот метод был введён в Qt 5.11.
char *QTest::toString(const QVector3D &v)
Это перегруженный метод.
Возвращает текстовое представление трёхмерного вектора v.
Этот метод был введён в Qt 5.11.
char *QTest::toString(const QVector4D &v)
Это перегруженный метод.
Возвращает текстовое представление четырёхмерного вектора v.
Этот метод был введён в Qt 5.11.
char *QTest::toString(QSizePolicy::Policy p)
Это перегруженный метод.
Возвращает текстовое представление политики p.
Этот метод был введён в 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.
END_OF_DOCUMENT_MARKERДокументация макросов
QBENCHMARK
Этот макрос используется для измерения производительности кода в рамках теста. Код, подлежащий измерению производительности, находится в блоке кода, следующего за этим макросом.
Например:
void TestBenchmark::simple()
{
QString str1 = QLatin1String("This is a test string");
QString str2 = QLatin1String("This is a test string");
QCOMPARE(str1.localeAwareCompare(str2), 0);
QBENCHMARK {
str1.localeAwareCompare(str2);
}
} См. также Создание бенчмарка и Написание бенчмарка.
QBENCHMARK_ONCE
Макрос QBENCHMARK_ONCE предназначен для измерения производительности блока кода, выполняя его один раз.
Этот макрос используется для измерения производительности кода в рамках теста. Код, подлежащий измерению производительности, находится в блоке кода, следующего за этим макросом.
В отличие от QBENCHMARK, содержимое вложенного блока кода выполняется только один раз. Время выполнения будет показано как «0», если оно слишком короткое для измерения выбранным бэкендом. (Использовать)
Эта функция была представлена в Qt 4.6.
См. также Создание бенчмарка и Написание бенчмарка.
QCOMPARE(actual, expected)
Макрос QCOMPARE() сравнивает значение actual со значением expected, используя оператор равенства. Если actual и expected совпадают, выполнение продолжается. В противном случае в журнале тестов фиксируется ошибка, и функция тестирования возвращается, не выполняя последующие проверки.
Всегда соблюдайте семантику параметров QCOMPARE(). Первый параметр, передаваемый ему, всегда должен быть фактическим значением, полученным кодом, который тестируется, а второй параметр — ожидаемым значением. Когда значения не совпадают, QCOMPARE() выводит их с метками Фактическое и Ожидаемое. Если порядок параметров изменён, отладка неудачного теста может быть запутанной, а тесты, ожидающие нулевого значения, могут завершиться неудачей из-за ошибок округления.
При сравнении чисел с плавающей точкой (float, double и qfloat16) используется qFuzzyCompare() для конечных значений. Если qFuzzyIsNull() истинно для обоих значений, они также считаются равными. Бесконечности совпадают, если они имеют одинаковый знак, и любое NaN в качестве фактического значения соответствует любому NaN в качестве ожидаемого значения (даже если NaN != NaN, даже если они идентичны).
QCOMPARE() пытается вывести содержимое значений в случае неудачи сравнения, чтобы из журнала тестов было видно, почему сравнение завершилось неудачей.
Пример:
QCOMPARE(QString("hello").toUpper(), QString("HELLO")); Примечание: Этот макрос может использоваться только в функции теста, которая вызывается фреймворком тестирования.
Для собственных классов можно использовать QTest::toString() для форматирования значений для вывода в журнал тестов.
Пример:
char *toString(const MyType &t)
{
char *repr = new char[t.reprSize()];
t.writeRepr(repr);
return repr;
} Возврат от toString() должен быть new char []. То есть он должен быть освобожден с помощью delete[] (а не free() или просто delete), как только вызывающий код закончит с ним.
См. также QVERIFY(), QTRY_COMPARE(), QTest::toString() и QEXPECT_FAIL().
QEXPECT_FAIL(dataIndex, comment, mode)
Макрос QEXPECT_FAIL() помечает следующий QCOMPARE() или QVERIFY() как ожидаемую ошибку. Вместо добавления ошибки в журнал тестов, ожидаемая ошибка будет сообщена.
Если QVERIFY() или QCOMPARE() помечен как ожидаемая ошибка, но проходит вместо этого, в журнал тестов записывается неожиданное прохождение (XPASS).
Параметр dataIndex описывает, для какой записи в данных теста ожидается ошибка. Передайте пустую строку (""), если ошибка ожидается для всех записей или если данные теста отсутствуют.
comment будет добавлен к журналу тестов для ожидаемой ошибки.
mode — QTest::TestFailMode и устанавливает, продолжать ли выполнение теста.
Примечание: Этот макрос может использоваться только в функции теста, которая вызывается фреймворком тестирования.
Пример 1:
QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43); В приведённом выше примере ожидаемая ошибка будет записана в вывод теста, если переменная i не равна 42. Если переменная i равна 42, вместо этого записывается неожиданное прохождение. QEXPECT_FAIL() не влияет на второе утверждение QCOMPARE() в примере.
Пример 2:
QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42); Функция теста выше не будет продолжать выполнение для записи данных теста data27.
См. также QTest::TestFailMode, QVERIFY() и QCOMPARE().
QFAIL(message)
Этот макрос может быть использован для принудительного завершения теста с ошибкой. Тест прекращает выполнение, и сообщение об ошибке message добавляется в журнал тестов.
Примечание: Этот макрос может использоваться только в функции теста, которая вызывается фреймворком тестирования.
Пример:
if (sizeof(int) != 4)
QFAIL("This test has not been ported to this platform yet."); QFETCH(type, name)
Макрос fetch создаёт локальную переменную с именем name и типом type в стеке. name и type должны соответствовать столбцу из таблицы данных теста. Это проверяется, и тест прервётся, если проверка не пройдёт.
Предположим, тест имеет следующие данные:
void TestQString::toInt_data()
{
QTest::addColumn<QString>("aString");
QTest::addColumn<int>("expected");
QTest::newRow("positive value") << "42" << 42;
QTest::newRow("negative value") << "-42" << -42;
QTest::newRow("zero") << "0" << 0;
} Данные теста имеют два элемента: QString с именем aString и целое число с именем expected. Для извлечения этих значений в самом тесте:
void TestQString::toInt()
{
QFETCH(QString, aString);
QFETCH(int, expected);
QCOMPARE(aString.toInt(), expected);
} aString и expected — переменные в стеке, инициализированные текущими данными теста.
Примечание: Этот макрос может использоваться только в функции теста, которая вызывается фреймворком тестирования. Функция теста должна иметь функцию _data.
QFETCH_GLOBAL(type, name)
Этот макрос извлекает переменную с именем name и типом type из строки в глобальной таблице данных. name и type должны соответствовать столбцу в глобальной таблице данных. Это проверяется, и тест прервётся, если проверка не пройдёт.
Предположим, тест имеет следующие данные:
void TestQLocale::initTestCase_data()
{
QTest::addColumn<QLocale>("locale");
QTest::newRow("C") << QLocale::c();
QTest::newRow("UKish") << QLocale("en_GB");
QTest::newRow("USAish") << QLocale(QLocale::English, QLocale::UnitedStates);
}
void TestQLocale::roundTripInt_data()
{
QTest::addColumn<int>("number");
QTest::newRow("zero") << 0;
QTest::newRow("one") << 1;
QTest::newRow("two") << 2;
QTest::newRow("ten") << 10;
} Данные собственного теста — одно число на строку. В этом случае initTestCase_data() также предоставляет локаль на строку. Поэтому этот тест будет выполняться со всеми комбинациями локалей из последней и числа из первой. Таким образом, с четырьмя строками в глобальной таблице и тремя в локальной, функция теста выполняется для 12 различных тестовых случаев (4 * 3 = 12).
void TestQLocale::roundTripInt()
{
QFETCH_GLOBAL(QLocale, locale);
QFETCH(int, number);
bool ok;
QCOMPARE(locale.toInt(locale.toString(number), &ok), number);
QVERIFY(ok);
} Локаль считывается из глобальной таблицы данных с помощью QFETCH_GLOBAL(), а число — из локальной таблицы данных с помощью QFETCH().
Примечание: Этот макрос может использоваться только в методах теста класса с методом initTestCase_data().
QFINDTESTDATA(filename)
Возвращает QString для файла тестовых данных, на который ссылается filename, или пустой QString, если файл тестовых данных не найден.
Этот макрос позволяет тесту загружать данные из внешнего файла без жёсткого кодирования абсолютного имени файла в тесте или использования относительных путей, что может быть небезопасно.
Возвращаемый путь будет первым путём из следующего списка, который разрешается до существующего файла или каталога:
- filename относительно QCoreApplication::applicationDirPath() (только если был создан объект QCoreApplication или QApplication).
- filename относительно стандартного каталога установки теста (QLibraryInfo::TestsPath с добавленным в нижнем регистре именем тестового случая).
- filename относительно каталога, содержащего исходный файл, из которого вызван QFINDTESTDATA.
Если указанный файл/каталог не существует ни в одном из этих местоположений, в журнал тестов выводится предупреждение.
Например, в этом коде:
bool tst_MyXmlParser::parse()
{
MyXmlParser parser;
QString input = QFINDTESTDATA("testxml/simple1.xml");
QVERIFY(parser.parse(input));
} Файл тестовых данных будет разрешён как первый существующий файл из:
/home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml/usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml/home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
Это позволяет тесту найти свои тестовые данные независимо от того, установлен ли тест и совпадает ли структура сборки теста со структурой исходного кода теста.
Примечание: надёжное определение тестовых данных из исходного каталога требует либо использования qmake, либо определения макроса QT_TESTCASE_BUILDDIR, указывающего на рабочий каталог, из которого вызывается компилятор, или передачи только абсолютных путей к исходным файлам компилятору. В противном случае абсолютный путь к исходному каталогу определить невозможно.
Примечание: Для тестов, которые используют макрос QTEST_APPLESS_MAIN() для генерации функции main(), QFINDTESTDATA не будет пытаться найти тестовые данные относительно QCoreApplication::applicationDirPath(). На практике это означает, что тесты, использующие QTEST_APPLESS_MAIN(), не смогут найти свои тестовые данные при запуске из структуры тени сборки.
Эта функция была представлена в Qt 5.0.
QSKIP(description)
Если вызывается из функции тестирования, макрос QSKIP() останавливает выполнение теста без добавления ошибки в журнал тестов. Его можно использовать для пропуска тестов, которые не имеют смысла в текущей конфигурации. Например, тест рендеринга шрифтов может вызвать QSKIP(), если необходимые шрифты не установлены на тестовой системе.
Текст description добавляется в журнал тестов и должен содержать объяснение причин, по которым тест не мог быть выполнен.
Если тест основан на данных, каждый вызов QSKIP() в функции теста будет пропускать только текущую строку данных теста, поэтому безусловный вызов QSKIP() будет генерировать одно сообщение о пропуске в журнале тестов для каждой строки данных теста.
Если вызывается из функции _data, макрос QSKIP() остановит выполнение функции _data и предотвратит выполнение связанной функции тестирования. Это полностью опускает тест, основанный на данных. Чтобы опустить отдельные строки, сделайте их условными, используя простое if (condition) newRow(...) << ... в функции _data, вместо использования QSKIP() в функции тестирования.
Если вызывается из initTestCase_data(), макрос QSKIP() пропустит все тесты и _data функции. Если вызывается из initTestCase(), когда нет initTestCase_data(), или когда он настраивает только одну строку, QSKIP() также пропустит весь тест. Однако, если initTestCase_data() содержит более одной строки, то initTestCase() вызывается (после каждого теста и, наконец, завершения) один раз на каждую строку данных. Поэтому вызов QSKIP() в initTestCase() просто пропустит все функции тестов для текущей строки глобальных данных, настроенных initTestCase_data().
Примечание: Этот макрос может быть использован только в функции теста или _data функции, которая вызывается тестовым фреймворком.
Пример:
if (!QSqlDatabase::drivers().contains("SQLITE"))
QSKIP("This test requires the SQLITE database driver"); Пропуск известных ошибок
Если тест выявляет известную ошибку, которая не будет исправлена немедленно, используйте макрос QEXPECT_FAIL() для документирования ошибки и ссылки на идентификатор отслеживания ошибки для известной проблемы. Когда тест выполняется, ожидаемые ошибки будут помечены как XFAIL в выходных данных теста и не будут учитываться как ошибки при установке кода возврата тестовой программы. Если ожидаемая ошибка не произошла, будет сообщено об XPASS (неожиданный проход) в выходных данных теста, и это будет считаться ошибкой теста.
Для известных ошибок QEXPECT_FAIL() лучше, чем QSKIP(), так как разработчик не может исправить ошибку без результата XPASS, напоминающего, что тест также необходимо обновить. Если используется QSKIP(), нет напоминания о пересмотре или повторном включении теста, без которого последующие регрессии не будут сообщены.
См. также QEXPECT_FAIL() и Выбор подходящих механизмов исключения тестов.
QTEST(actual, testElement)
QTEST() — это удобный макрос для QCOMPARE(), который сравнивает значение actual с элементом testElement из данных теста. Если такого элемента нет, тест утверждает это.
Помимо этого, QTEST() ведет себя точно так же, как QCOMPARE().
Вместо того, чтобы писать:
QFETCH(QString, myString);
QCOMPARE(QString("hello").toUpper(), myString); можно написать:
QTEST(QString("hello").toUpper(), "myString"); См. также QCOMPARE().
QTEST_APPLESS_MAIN(TestClass)
Реализует функцию main(), которая выполняет все тесты в TestClass.
Ведёт себя как QTEST_MAIN(), но не создаёт объект QApplication. Используйте этот макрос для действительно простых автономных тестов без графического интерфейса.
См. также QTEST_MAIN().
QTEST_GUILESS_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект QCoreApplication и TestClass, и выполняет все тесты в том порядке, в котором они были определены. Используйте этот макрос для создания автономных исполняемых файлов.
Ведёт себя как QTEST_MAIN(), но создаёт объект QCoreApplication вместо объекта QApplication. Используйте этот макрос, если вашему тестовому случаю не нужна функциональность, предлагаемая QApplication, но цикл событий всё же необходим.
Эта функция была добавлена в Qt 5.0.
См. также QTEST_MAIN().
QTEST_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект приложения и TestClass, и выполняет все тесты в том порядке, в котором они были определены. Используйте этот макрос для создания автономных исполняемых файлов.
Если QT_WIDGETS_LIB определён, объект приложения будет QApplication, если QT_GUI_LIB определён, объект приложения будет QGuiApplication, иначе это будет QCoreApplication. Если используется qmake, а конфигурация включает QT += widgets, то QT_WIDGETS_LIB будет определён автоматически. Аналогично, если используется qmake и конфигурация включает QT += gui, то QT_GUI_LIB будет определён автоматически.
Примечание: На платформах, где навигация с помощью клавиатуры включена по умолчанию, этот макрос принудительно отключит её, если QT_WIDGETS_LIB определён. Это делается для упрощения использования событий клавиатуры при написании автоматических тестов. Если вы хотите написать тестовый случай, использующий навигацию с помощью клавиатуры, вы должны включить её либо в initTestCase() или init() функциях своего тестового случая, вызвав QApplication::setNavigationMode().
Пример:
QTEST_MAIN(TestQString)
См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec() и QApplication::setNavigationMode().
QTRY_COMPARE(actual, expected)
Выполняет сравнение значений actual и expected, вызывая QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
Макрос QTRY_COMPARE_WITH_TIMEOUT() похож на QCOMPARE(), но выполняет сравнение значений actual и expected повторно, пока значения не станут равными или не будет достигнут таймаут (в миллисекундах). Между каждым сравнением будут обрабатываться события. Если таймаут истечёт, в журнале тестов будет зарегистрирована ошибка, и дальнейшее выполнение теста не будет происходить.
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
QTRY_VERIFY2(condition, message)
Проверяет condition, вызывая QTRY_VERIFY2_WITH_TIMEOUT() с таймаутом в пять секунд. Если condition по-прежнему ложно, выводится message. message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData());
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.6.
См. также QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY(condition)
Проверяет condition, вызывая QTRY_VERIFY_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
Макрос QTRY_VERIFY2_WITH_TIMEOUT подобен QTRY_VERIFY_WITH_TIMEOUT(), за исключением того, что он выводит подробное сообщение message, когда condition по-прежнему ложно после заданного таймаута (в миллисекундах). message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10000);
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.6.
См. также QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)
Макрос QTRY_VERIFY_WITH_TIMEOUT() похож на QVERIFY(), но проверяет condition многократно, пока условие не станет истинным или не истечёт timeout (в миллисекундах). Между каждым вычислением будут обрабатываться события. Если таймаут истечёт, в журнале тестов будет записана ошибка, и дальнейшее выполнение теста не будет происходить.
Примечание: Этот макрос может быть использован только в функции теста, которая вызывается тестовым фреймворком.
Эта функция была добавлена в Qt 5.0.
См. также QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
QVERIFY2(condition, message)
Макрос QVERIFY2() ведет себя точно так же, как QVERIFY(), за исключением того, что он сообщает сообщение message, когда condition ложно. message — обычная строка C.
Сообщение также может быть получено из вызова функции, которая создаёт обычную строку C, например, qPrintable() применённую к QString, который может быть создан любыми обычными способами, в том числе, с помощью .args() для форматирования некоторых данных.
Пример:
QVERIFY2(QFileInfo("file.txt").exists(), "file.txt does not exist."); Например, если у вас есть объект файла и вы тестируете его open() функцию, вы можете написать тест с оператором вроде:
bool opened = file.open(QIODevice::WriteOnly); QVERIFY(opened);
Если этот тест завершится неудачей, он не даст никаких подсказок о том, почему файл не смог открыться:
FAIL! : tst_QFile::open_write() 'opened' returned FALSE. ()
Если вы можете сконструировать более информативное сообщение об ошибке из значений, которые тестируются, вы можете использовать QVERIFY2(), чтобы передать это сообщение вместе с условием вашего теста, чтобы получить более информативное сообщение об ошибке:
QVERIFY2(file.open(QIODevice::WriteOnly),
qPrintable(QString("open %1: %2")
.arg(file.fileName()).arg(file.errorString()))); Если этот раздел тестируется в системе Qt CI, указанное выше подробное сообщение об ошибке будет вставлено в сводку, размещённую в системе просмотра кода:
FAIL! : tst_QFile::open_write() 'opened' returned FALSE. (open /tmp/qt.a3B42Cd: No space left on device)
См. также QVERIFY(), QCOMPARE(), и QEXPECT_FAIL().
QVERIFY(condition)
Макрос QVERIFY() проверяет, истинно ли условие condition. Если оно истинно, выполнение продолжается. Если нет, в журнале тестов фиксируется ошибка, и дальнейшее выполнение теста прекращается.
Вы можете использовать QVERIFY2(), если это практично и полезно добавить дополнительную информацию в отчёт об ошибке теста.
Примечание: Этот макрос может быть использован только в функции теста, вызываемой фреймворком для тестирования.
Например, следующий код демонстрирует использование этого макроса для проверки того, что объект QSignalSpy является допустимым:
QVERIFY(spy.isValid());
Для получения более подробной информации об ошибке используйте QCOMPARE(x, y) вместо QVERIFY(x == y), потому что оно сообщает как ожидаемое, так и фактическое значение при ошибке сравнения.
См. также QCOMPARE(), QTRY_VERIFY(), QSignalSpy, и QEXPECT_FAIL().
QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)
Макрос QVERIFY_EXCEPTION_THROWN выполняет expression и пытается перехватить исключение, брошенное из expression. Если expression выбрасывает исключение, и его тип совпадает с exceptiontype или exceptiontype может быть заменён типом брошенного исключения (т.е. обычно тип брошенного исключения публично наследуется от exceptiontype), то выполнение продолжится. Если брошен исключение несовместимого типа или expression вообще не выбрасывает исключение, в журнале тестов будет зафиксирована ошибка, и дальнейшее выполнение теста прекратится.
Примечание: Этот макрос может быть использован только в функции теста, вызываемой фреймворком для тестирования.
Эта функция была добавлена в Qt 5.3.
QWARN(message)
Добавляет message в журнал тестов в качестве предупреждения. Этот макрос может быть использован в любом месте ваших тестов.
Примечание: Эта функция безопасна для многопоточной среды.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtest.html