Пространство имен QTest
Пространство имен QTest содержит все функции и объявления, относящиеся к Qt Test. Подробнее...
| Заголовок: | #include <QTest> |
| qmake: | QT += testlib |
Классы
| класс | Последовательность событий касания QTouchEvent |
Типы
| перечисление | ИндексАтрибута { AI_Undefined, AI_Name, AI_Result, AI_Tests, AI_Failures, …, AI_Iterations } |
| перечисление | ДействиеКлавиши { Press, Release, Click, Shortcut } |
| перечисление | ТипЭлементаЛога { LET_Undefined, LET_Property, LET_Properties, LET_Failure, LET_Error, …, LET_SystemError } |
| перечисление | ДействиеМыши { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove } |
| перечисление | МетрикаQBenchmark { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, WalltimeNanoseconds, …, EmulationFaults } |
| перечисление | РежимОшибкиТеста { Abort, Continue } |
Функции
| void | addColumn(const char *name, T *dummy = ...) |
| 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::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 для получения информации о том, как писать модульные тесты.
Классы
класс QTouchEventSequence
Класс QTouchEventSequence используется для моделирования последовательности событий касания. Подробнее...
Документация по типам
перечисление QTest::AttributeIndex
Это перечисление нумерует различные тесты.
| Постоянная | Значение |
|---|---|
QTest::AI_Undefined |
-1 |
QTest::AI_Name |
0 |
QTest::AI_Result |
1 |
QTest::AI_Tests |
2 |
QTest::AI_Failures |
3 |
QTest::AI_Errors |
4 |
QTest::AI_Type |
5 |
QTest::AI_Description |
6 |
QTest::AI_PropertyValue |
7 |
QTest::AI_QTestVersion |
8 |
QTest::AI_QtVersion |
9 |
QTest::AI_File |
10 |
QTest::AI_Line |
11 |
QTest::AI_Metric |
12 |
QTest::AI_Tag |
13 |
QTest::AI_Value |
14 |
QTest::AI_Iterations |
15 |
перечисление QTest::KeyAction
Это перечисление описывает возможные действия для обработки клавиш.
| Постоянная | Значение | Описание |
|---|---|---|
QTest::Press |
0 |
Клавиша нажата. |
QTest::Release |
1 |
Клавиша отпущена. |
QTest::Click |
2 |
Клавиша нажата и отпущена (щелчок). |
QTest::Shortcut |
3 |
Активна комбинация клавиш. Это значение было добавлено в Qt 5.6. |
перечисление QTest::LogElementType
Перечисление указывает виды сообщений журналов тестов.
| Постоянная | Значение |
|---|---|
QTest::LET_Undefined |
-1 |
QTest::LET_Property |
0 |
QTest::LET_Properties |
1 |
QTest::LET_Failure |
2 |
QTest::LET_Error |
3 |
QTest::LET_TestCase |
4 |
QTest::LET_TestSuite |
5 |
QTest::LET_Benchmark |
6 |
QTest::LET_SystemError |
7 |
перечисление QTest::MouseAction
Это перечисление описывает возможные действия для обработки мыши.
| Постоянная | Значение | Описание |
|---|---|---|
QTest::MousePress |
0 |
Кнопка мыши нажата. |
QTest::MouseRelease |
1 |
Кнопка мыши отпущена. |
QTest::MouseClick |
2 |
Кнопка мыши нажата и отпущена (щелчок). |
QTest::MouseDClick |
3 |
Кнопка мыши дважды нажата и отпущена (двойной щелчок). |
QTest::MouseMove |
4 |
Указатель мыши перемещён. |
перечисление QTest::QBenchmarkMetric
Это перечисление перечисляет все, что можно измерить.
| Константа | Значение | Описание |
|---|---|---|
QTest::FramesPerSecond |
0 |
Кадров в секунду |
QTest::BitsPerSecond |
1 |
Битов в секунду |
QTest::BytesPerSecond |
2 |
Байтов в секунду |
QTest::WalltimeMilliseconds |
3 |
Время по часам в миллисекундах |
QTest::WalltimeNanoseconds |
7 |
Время по часам в наносекундах |
QTest::BytesAllocated |
8 |
Использование памяти в байтах |
QTest::Events |
6 |
Количество событий |
QTest::CPUTicks |
4 |
Время процессора |
QTest::CPUMigrations |
9 |
Миграции процессов между процессорами |
QTest::CPUCycles |
10 |
Циклы процессора |
QTest::RefCPUCycles |
30 |
Циклы эталонного процессора |
QTest::BusCycles |
11 |
Циклы шины |
QTest::StalledCycles |
12 |
Заблокированные циклы |
QTest::InstructionReads |
5 |
Чтения инструкций |
QTest::Instructions |
13 |
Выполненные инструкции |
QTest::BranchInstructions |
14 |
Инструкции типа ветвления |
QTest::BranchMisses |
15 |
Инструкции ветвления, которые были неправильно предсказаны |
QTest::CacheReferences |
16 |
Доступы к кэшу любого типа |
QTest::CacheMisses |
20 |
Промахи кэша любого типа |
QTest::CacheReads |
17 |
Чтения/загрузки из кэша |
QTest::CacheReadMisses |
21 |
Промахи чтения/загрузки из кэша |
QTest::CacheWrites |
18 |
Записи/хранения в кэше |
QTest::CacheWriteMisses |
22 |
Промахи записи/хранения в кэше |
QTest::CachePrefetches |
19 |
Предзагрузки кэша |
QTest::CachePrefetchMisses |
23 |
Промахи предзагрузки кэша |
QTest::ContextSwitches |
24 |
Переключения контекста |
QTest::PageFaults |
25 |
Ошибки страниц любого типа |
QTest::MinorPageFaults |
26 |
Незначительные ошибки страниц |
QTest::MajorPageFaults |
27 |
Существенные ошибки страниц |
QTest::AlignmentFaults |
28 |
Ошибки, вызванные неправильной выравниванием |
QTest::EmulationFaults |
29 |
Ошибки, потребовавшие эмуляции программного обеспечения |
Обратите внимание, что WalltimeNanoseconds и BytesAllocated предоставляются только для использования через setBenchmarkResult(), и результаты по этим метрикам не могут быть предоставлены автоматически фреймворком QTest.
Этот перечисление был введён или изменён в 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(). Если сообщение с соответствующим типом выводится, оно будет удалено из журнала теста. Если тест завершился и сообщение не выводилось, в журнал теста будет добавлено сообщение об ошибке теста.
Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое вы хотите игнорировать, выводится дважды, необходимо дважды вызвать 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. Необязательно можно указать модификатор клавиатуры modifier и задержку (в миллисекундах) delay теста перед каждым нажатием клавиши.
Пример:
QTest::keyClicks(myWidget, "hello world");
В приведенном выше примере имитируется нажатие последовательности клавиш, представляющих "hello world", на myWidget без каких-либо модификаторов клавиатуры и без задержки теста.
См. также QTest::keyClick().
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Отправляет событие Qt для клавиш на widget с заданной key и связанным action. Необязательно можно указать модификатор клавиатуры modifier и задержку (в миллисекундах) теста перед отправкой события.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженная функция.
Отправляет событие Qt для клавиш на window с заданным символом ascii и связанным action. Необязательно можно указать модификатор клавиатуры modifier и задержку (в миллисекундах) теста перед отправкой события.
Функция была добавлена в Qt 5.0.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженная функция.
Отправляет событие Qt для клавиш на window с заданной key и связанным action. Необязательно можно указать модификатор клавиатуры modifier и задержку (в миллисекундах) теста перед отправкой события.
Функция была добавлена в Qt 5.0.
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженная функция.
Отправляет событие Qt для клавиш на widget с заданным символом ascii и связанным action. Необязательно можно указать модификатор клавиатуры modifier и задержку (в миллисекундах) теста перед отправкой события.
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().
END_OF_DOCUMENT_MARKERvoid 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 = ...)
Это перегруженный метод.
Имитирует нажатие кнопки button с необязательным stateKey модификатором на window. Позиция определяется pos; по умолчанию - центр window. Если 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; по умолчанию — центр виджета. Если указан delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
См. также QTest::mousePress() и QTest::mouseClick().
void QTest::mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
Это перегруженный метод.
Имитирует отпускание кнопки мыши button с необязательным модификатором stateKey на окне window. Позиция отпускания определяется pos; по умолчанию — центр окна. Если указан delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
Этот метод был добавлен в Qt 5.0.
См. также QTest::mousePress() и QTest::mouseClick().
QTestData &QTest::newRow(const char *dataTag)
Добавляет новую строку к текущим тестовым данным. dataTag — имя тестовых данных, которое будет отображено в выводе теста. Возвращает ссылку на QTestData, которая может использоваться для потоковой передачи данных.
Пример:
void myTestFunction_data()
{
QTest::addColumn<QString>("aString");
QTest::newRow("just hello") << QString("hello");
QTest::newRow("a null string") << QString();
} Примечание: Этот макрос может быть использован только в функции данных теста, вызываемой тестовой средой.
См. Тестирование с данными для более подробного примера.
См. также addColumn() и QFETCH().
int QTest::qExec(QObject *testObject, int argc = 0, char **argv = 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().
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, где окно будет отображено на экране некоторое время после того, как ему было предложено отобразиться.
Обратите внимание, что окно, которое отображено на экране, может все ещё не считаться видимым, если область клиенты окна полностью закрыта другими окнами или если окно по другим причинам не видно. В этом случае функция вернёт timeout.
Конкретная конфигурация, в которой это происходит, — использование 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 как последовательность шестнадцатеричных символов, разделённых пробелами. Если входная строка слишком длинная, она усекается. Об усечении в возвращаемой строке свидетельствует эллипсис в конце. Вызывающий код владеет возвращенным указателем и должен гарантировать, что он будет позже передан в operator 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::ControlTypes cts)
Это перегруженная функция.
Возвращает текстовое представление типов элементов управления cts.
Эта функция была добавлена в Qt 5.5.
char *QTest::toString(QSizePolicy::ControlType ct)
Это перегруженная функция.
Возвращает текстовое представление типа элемента управления ct.
Эта функция была добавлена в Qt 5.5.
char *QTest::toString(QSizePolicy sp)
Это перегруженная функция.
Возвращает текстовое представление политики размера sp.
Эта функция была добавлена в Qt 5.5.
char *QTest::toString(const 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.
Эта функция была добавлена в 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)
Это перегруженная функция.
Возвращает текстовое представление 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.
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.
Документация макросов
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() для конечных значений. Бесконечности совпадают, если имеют одинаковый знак, а любое NaN в качестве фактического значения соответствует любому NaN в качестве ожидаемого значения (даже если NaN != NaN, даже если они идентичны). Это означает, что ожидание 0 может привести к ошибке, когда фактическое значение может быть подвержено ошибкам округления. Одним из решений этой проблемы является смещение как фактических, так и ожидаемых значений, добавив некоторую подходящую константу (например, 1).
QCOMPARE() пытается вывести содержимое значений в случае неудачи сравнения, поэтому в журнале тестов видно, почему сравнение завершилось неудачей.
Пример:
QCOMPARE(QString("hello").toUpper(), QString("HELLO")); Примечание: Этот макрос может использоваться только в функции теста, вызываемой фреймворком для тестирования.
Для собственных классов можно использовать QTest::toString() для форматирования значений для вывода в журнал тестов.
Пример:
namespace QTest {
template <> char *toString<MyType>(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);
}
void TestQLocale::roundTripInt_data()
{
QTest::addColumn<int>("number");
QTest::newRow("one") << 1;
QTest::newRow("two") << 2;
QTest::newRow("ten") << 10;
} Данные собственного теста — одно число на строку. В этом случае, initTestCase_data() также предоставляет локаль на строку. Таким образом, этот тест будет выполняться с каждой комбинацией локали из последнего и числа из первого.
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 для файла testdata, на который ссылается filename, или пустой QString, если файл testdata не найден.
Этот макрос позволяет тесту загружать данные из внешнего файла без жёсткого кодирования абсолютного имени файла в тест или использования относительных путей, которые могут быть подвержены ошибкам.
Возвращённый путь будет первым путём из следующего списка, который ссылается на существующий файл или директорию:
- 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));
} Файл testdata будет разрешён как первый существующий файл из:
/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
Это позволяет тесту найти свои данные независимо от того, был ли тест установлен и независимо от того, совпадает ли дерево сборки теста с деревом исходных кодов теста.
Примечание: надёжное определение testdata из каталога исходных кодов требует, чтобы либо использовался 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().
Пример:
class TestQString: public QObject { ... };
QTEST_MAIN(TestQString) См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec() и QApplication::setNavigationMode().
QTRY_COMPARE(actual, expected)
Выполняет сравнение значений actual и expected, вызвав QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Эта функция была введена в Qt 5.0.
См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
Макрос QTRY_COMPARE_WITH_TIMEOUT() похож на QCOMPARE(), но многократно сравнивает значения actual и expected, пока значения не станут равными или не истечёт timeout (в миллисекундах). Между каждым сравнением обрабатываются события. Если таймаут истечёт, в журнале тестов будет записана ошибка, и дальнейшее выполнение теста не произойдёт.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Эта функция была введена в Qt 5.0.
См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), QTRY_VERIFY() и QEXPECT_FAIL().
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 по-прежнему ложно после указанного timeout (в миллисекундах). message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10000);
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Эта функция была введена в Qt 5.6.
См. также QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), QTRY_COMPARE() и QEXPECT_FAIL().
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(qIsNaN(0.0 / 0.0), "Ill-defined division produced unambiguous result.");
Например, если у вас есть объект файла и вы тестируете его функцию 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.14/qtest.html