Пространство имён QTest
Пространство имён QTest содержит все функции и объявления, относящиеся к Qt Test. Подробнее...
| Заголовок: | #include <QTest> |
| qmake: | QT += testlib |
Классы
| класс | Последовательность событий касания QTouchEvent |
Типы
| перечисление | ИндексАтрибута { AI_Undefined, AI_Name, AI_Result, AI_Tests, ..., AI_Iterations } |
| перечисление | ДействиеКлавиши { Press, Release, Click, Shortcut } |
| перечисление | ТипЭлементаЛога { LET_Undefined, LET_Property, LET_Properties, LET_Failure, ..., LET_SystemError } |
| перечисление | ДействиеМыши { MousePress, MouseRelease, MouseClick, MouseDClick, MouseMove } |
| перечисление | МетрикаQBenchmark { FramesPerSecond, BitsPerSecond, BytesPerSecond, WalltimeMilliseconds, ..., 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, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyClick(QWindow *window, Qt::Key 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, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyPress(QWidget *widget, Qt::Key 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 | keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...) |
| void | keyRelease(QWidget *widget, Qt::Key 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 | keyRelease(QWindow *window, 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(const std::pair<T1, T2> &pair) |
| 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 QChar &character) |
| char * | toString(const QPoint &point) |
| char * | toString(const QSize &size) |
| char * | toString(const QRect &rectangle) |
| char * | toString(const QPointF &point) |
| char * | toString(const QSizeF &size) |
| char * | toString(const QRectF &rectangle) |
| char * | toString(const QUrl &url) |
| char * | toString(const QUuid &uuid) |
| char * | toString(const QVariant &variant) |
| char * | toString(std::nullptr_t) |
| char * | toString(const QVector2D &v) |
| char * | toString(const QVector3D &v) |
| char * | toString(const QVector4D &v) |
| char * | toString(QSizePolicy::Policy p) |
| char * | toString(QSizePolicy::ControlTypes cts) |
| char * | toString(QSizePolicy::ControlType ct) |
| char * | toString(QSizePolicy sp) |
| QTest::QTouchEventSequence | touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit) |
| QTest::QTouchEventSequence | touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit) |
Макросы
| QBENCHMARK | |
| QBENCHMARK_ONCE | |
| QCOMPARE(actual, expected) | |
| QEXPECT_FAIL(dataIndex, comment, mode) | |
| QFAIL(message) | |
| QFETCH(type, name) | |
| QFINDTESTDATA(filename) | |
| QSKIP(description) | |
| QTEST(actual, testElement) | |
| QTEST_APPLESS_MAIN(TestClass) | |
| QTEST_GUILESS_MAIN(TestClass) | |
| QTEST_MAIN(TestClass) | |
| QTRY_COMPARE(actual, expected) | |
| QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout) | |
| QTRY_VERIFY2(condition, message) | |
| QTRY_VERIFY(condition) | |
| QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout) | |
| QTRY_VERIFY_WITH_TIMEOUT(condition, timeout) | |
| QVERIFY2(condition, message) | |
| QVERIFY(condition) | |
| QVERIFY_EXCEPTION_THROWN(expression, exceptiontype) | |
| QWARN(message) |
Подробное описание
Пространство имен QTest содержит все функции и объявления, относящиеся к Qt Test.
См. Обзор Qt Test для получения информации о том, как создавать модульные тесты.
END_OF_DOCUMENT_MARKERКлассы
класс QTouchEventSequence
Класс QTouchEventSequence используется для моделирования последовательности событий касания. Подробнее...
Документация типов
enum QTest::AttributeIndex
Этот перечисление нумерует различные тесты.
| Постоянная | Значение |
|---|---|
QTest::AI_Undefined |
-1 |
QTest::AI_Name |
0 |
QTest::AI_Result |
1 |
QTest::AI_Tests |
2 |
QTest::AI_Failures |
3 |
QTest::AI_Errors |
4 |
QTest::AI_Type |
5 |
QTest::AI_Description |
6 |
QTest::AI_PropertyValue |
7 |
QTest::AI_QTestVersion |
8 |
QTest::AI_QtVersion |
9 |
QTest::AI_File |
10 |
QTest::AI_Line |
11 |
QTest::AI_Metric |
12 |
QTest::AI_Tag |
13 |
QTest::AI_Value |
14 |
QTest::AI_Iterations |
15 |
enum QTest::KeyAction
Это перечисление описывает возможные действия для обработки клавиш.
| Постоянная | Значение | Описание |
|---|---|---|
QTest::Press |
0 |
Клавиша нажата. |
QTest::Release |
1 |
Клавиша отпущена. |
QTest::Click |
2 |
Клавиша нажата и отпущена (щелчок). |
QTest::Shortcut |
3 |
Активна комбинация клавиш. Это значение было добавлено в Qt 5.6. |
enum QTest::LogElementType
Перечисление определяет типы сообщений журналов тестов.
| Постоянная | Значение |
|---|---|
QTest::LET_Undefined |
-1 |
QTest::LET_Property |
0 |
QTest::LET_Properties |
1 |
QTest::LET_Failure |
2 |
QTest::LET_Error |
3 |
QTest::LET_TestCase |
4 |
QTest::LET_TestSuite |
5 |
QTest::LET_Benchmark |
6 |
QTest::LET_SystemError |
7 |
enum QTest::MouseAction
Это перечисление описывает возможные действия для обработки мыши.
| Постоянная | Значение | Описание |
|---|---|---|
QTest::MousePress |
0 |
Нажата кнопка мыши. |
QTest::MouseRelease |
1 |
Отпущена кнопка мыши. |
QTest::MouseClick |
2 |
Кнопка мыши нажата и отпущена (щелчок). |
QTest::MouseDClick |
3 |
Кнопка мыши дважды нажата и отпущена (двойной щелчок). |
QTest::MouseMove |
4 |
Указатель мыши перемещён. |
enum QTest::QBenchmarkMetric
Это перечисление перечисляет все, что может быть проверено на производительность.
| Постоянная | Значение | Описание |
|---|---|---|
QTest::FramesPerSecond |
0 |
Кадров в секунду |
QTest::BitsPerSecond |
1 |
Битов в секунду |
QTest::BytesPerSecond |
2 |
Байтов в секунду |
QTest::WalltimeMilliseconds |
3 |
Время в миллисекундах |
QTest::WalltimeNanoseconds |
7 |
Время в наносекундах |
QTest::BytesAllocated |
8 |
Использование памяти в байтах |
QTest::Events |
6 |
Количество событий |
QTest::CPUTicks |
4 |
Время процессора |
QTest::CPUMigrations |
9 |
Перемещения процессов между процессорами |
QTest::CPUCycles |
10 |
Такты процессора |
QTest::RefCPUCycles |
30 |
Такты эталонного процессора |
QTest::BusCycles |
11 |
Такты шины |
QTest::StalledCycles |
12 |
Заблокированные циклы |
QTest::InstructionReads |
5 |
Чтения инструкций |
QTest::Instructions |
13 |
Выполненные инструкции |
QTest::BranchInstructions |
14 |
Инструкции типа ветвления |
QTest::BranchMisses |
15 |
Пропущенные инструкции ветвления |
QTest::CacheReferences |
16 |
Доступ к кэшу любого типа |
QTest::CacheMisses |
20 |
Промахи кэша любого типа |
QTest::CacheReads |
17 |
Чтения/загрузки из кэша |
QTest::CacheReadMisses |
21 |
Промахи чтения/загрузки из кэша |
QTest::CacheWrites |
18 |
Записи/хранение в кэш |
QTest::CacheWriteMisses |
22 |
Промахи записи/хранения в кэш |
QTest::CachePrefetches |
19 |
Предварительная загрузка из кэша |
QTest::CachePrefetchMisses |
23 |
Промахи предварительной загрузки из кэша |
QTest::ContextSwitches |
24 |
Переключение контекстов |
QTest::PageFaults |
25 |
Ошибки страниц любого типа |
QTest::MinorPageFaults |
26 |
Незначительные ошибки страниц |
QTest::MajorPageFaults |
27 |
Существенные ошибки страниц |
QTest::AlignmentFaults |
28 |
Ошибки из-за неправильного выравнивания |
QTest::EmulationFaults |
29 |
Ошибки, потребовавшие эмуляции программным обеспечением |
Обратите внимание, что WalltimeNanoseconds и BytesAllocated предоставляются только для использования через setBenchmarkResult(), и результаты по этим метрикам не могут быть автоматически предоставлены фреймворком QTest.
Этот перечисление был введён или изменён в Qt 4.7.
См. также QTest::benchmarkMetricName() и QTest::benchmarkMetricUnit().
enum 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(). Если сообщение с соответствующим типом message выводится, оно будет удалено из протокола теста. Если тест завершился и сообщение не выводилось, в протокол теста добавляется сообщение об ошибке теста.
Примечание: Вызов этой функции игнорирует только одно сообщение. Если сообщение, которое вы хотите проигнорировать, выводится дважды, необходимо дважды вызвать 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, 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::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().
END_OF_DOCUMENT_MARKERvoid QTest::keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Имитирует нажатие последовательности клавиш на widget. Допускается указание модификатора клавиатуры и задержки (в миллисекундах) перед каждым нажатием клавиши.
Пример:
QTest::keyClicks(myWidget, "hello world");
В приведенном примере имитируется нажатие последовательности клавиш, представляющей «hello world», на myWidget без модификатора клавиатуры и без задержки.
См. также QTest::keyClick().
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Отправляет событие Qt для клавиши на widget с заданной клавишей и соответствующим действием. Допускается указание модификатора клавиатуры и задержки (в миллисекундах) перед отправкой события.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Отправляет событие Qt для клавиши на окно с заданной клавишей и соответствующим действием. Допускается указание модификатора клавиатуры и задержки (в миллисекундах) перед отправкой события.
Этот метод был добавлен в Qt 5.0.
void QTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Отправляет событие Qt для клавиши на widget с заданным кодом ascii и соответствующим действием. Допускается указание модификатора клавиатуры и задержки (в миллисекундах) перед отправкой события.
void QTest::keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Отправляет событие Qt для клавиши на окно с заданным кодом ascii и соответствующим действием. Допускается указание модификатора клавиатуры и задержки (в миллисекундах) перед отправкой события.
Этот метод был добавлен в Qt 5.0.
void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Имитирует нажатие клавиши с необязательным модификатором на widget. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует нажатие клавиши с необязательным модификатором на окно. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует нажатие клавиши с необязательным модификатором на widget. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует нажатие клавиши с необязательным модификатором на окно. Если delay больше 0, тест подождет delay миллисекунд перед нажатием клавиши.
Примечание: В какой-то момент необходимо отпустить клавишу, используя keyRelease().
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyRelease() и QTest::keyClick().
void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Имитирует отпускание клавиши с необязательным модификатором на widget. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.
См. также QTest::keyPress() и QTest::keyClick().
void QTest::keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует отпускание клавиши с необязательным модификатором на окно. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyPress() и QTest::keyClick().
void QTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует отпускание клавиши с необязательным модификатором на widget. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.
См. также QTest::keyClick().
void QTest::keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = ..., int delay = ...)
Это перегруженный метод.
Имитирует отпускание клавиши с необязательным модификатором на окно. Если delay больше 0, тест подождет delay миллисекунд перед отпусканием клавиши.
Этот метод был добавлен в Qt 5.0.
См. также QTest::keyClick().
void QTest::keySequence(QWindow *window, const QKeySequence &keySequence)
Это перегруженный метод.
Имитирует ввод keySequence в окно.
Этот метод был добавлен в 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 = ...)
Имитирует нажатие кнопки мыши с необязательным модификатором на widget. Позиция щелчка определяется pos; по умолчанию это центр виджета. Если указано delay, тест подождёт заданное количество миллисекунд до нажатия и отпускания кнопки.
См. также QTest::mousePress() и QTest::mouseRelease().
void QTest::mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
Это перегруженный метод.
Имитирует щелчок мышью по кнопке button с необязательным модификатором stateKey на window. Позиция щелчка определяется pos; по умолчанию это центр окна. Если указано 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; по умолчанию это центр виджета. Если указано delay, тест подождет указанное количество миллисекунд перед каждым нажатием и отпусканием кнопки.
См. также QTest::mouseClick().
void QTest::mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
Это перегруженный метод.
Имитирует двойной щелчок мышью по кнопке button с необязательным модификатором stateKey на window. Позиция щелчка определяется pos; по умолчанию это центр окна. Если указано delay, тест подождет указанное количество миллисекунд перед каждым нажатием и отпусканием кнопки.
Этот метод был представлен в Qt 5.0.
См. также QTest::mouseClick().
void QTest::mouseMove(QWidget *widget, QPoint pos = ..., int delay = ...)
Перемещает указатель мыши на widget. Если pos не указано, указатель мыши перемещается в центр виджета. Если задано delay (в миллисекундах), тест подождет перед перемещением указателя мыши.
void QTest::mouseMove(QWindow *window, QPoint pos = ..., int delay = ...)
Это перегруженный метод.
Перемещает указатель мыши на window. Если pos не указано, указатель мыши перемещается в центр окна. Если задано delay (в миллисекундах), тест подождет перед перемещением указателя мыши.
Этот метод был представлен в Qt 5.0.
void QTest::mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
Имитирует нажатие кнопки мыши button с необязательным модификатором modifier на widget. Позиция определяется pos; по умолчанию это центр виджета. Если delay указано, тест подождёт указанное количество миллисекунд перед нажатием.
См. также QTest::mouseRelease() и QTest::mouseClick().
void QTest::mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = ..., QPoint pos = ..., int delay = ...)
Это перегруженный метод.
Имитирует нажатие кнопки мыши button с необязательным модификатором stateKey на window. Позиция определяется pos; по умолчанию это центр окна. Если delay указано, тест подождёт указанное количество миллисекунд перед нажатием.
Этот метод был представлен в Qt 5.0.
См. также QTest::mouseRelease() и QTest::mouseClick().
void QTest::mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = ..., QPoint pos = ..., int delay = ...)
Имитирует отпускание кнопки мыши button с необязательным модификатором modifier на widget. Позиция определяется pos; по умолчанию это центр виджета. Если 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() не обрабатывает события и не реагирует на них во время ожидания. Сеть может разорваться во время ожидания. Используйте qWait(), чтобы ожидать без блокировки.
ms должно быть больше 0.
Примечание: Функция qSleep() вызывает либо nanosleep() на Unix, либо Sleep() на Windows, поэтому точность времени, затраченного на qSleep(), зависит от операционной системы.
Пример:
QTest::qSleep(250);
См. также 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.
См. также QTest::qWaitForWindowExposed() и QWindow::isActive().
bool QTest::qWaitForWindowActive(QWidget *widget, int timeout = 5000)
Ожидает timeout миллисекунд или пока окно виджета widget не станет активным.
Возвращает true, если окно виджета widget активно в течение timeout миллисекунд, иначе возвращает false.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowExposed() и QWidget::isActiveWindow().
bool QTest::qWaitForWindowExposed(QWindow *window, int timeout = 5000)
Ожидает timeout миллисекунд или пока окно window не станет видимым.
Возвращает true, если окно window становится видимым в течение timeout миллисекунд, иначе возвращает false.
Это полезно в основном для асинхронных систем, таких как X11, где окно будет отображено на экране некоторое время после запроса об отображении.
Обратите внимание, что окно, отображённое на экране, может всё ещё не считаться видимым, если область клиенти окна полностью закрыта другими окнами, или если окно по другим причинам не видно. В этом случае функция завершится с таймаутом.
Эта функция была добавлена в Qt 5.0.
См. также QTest::qWaitForWindowActive() и QWindow::isExposed().
bool QTest::qWaitForWindowExposed(QWidget *widget, int timeout = 5000)
Ожидает timeout миллисекунд или пока окно виджета widget не станет видимым. Возвращает true, если окно виджета widget становится видимым в течение timeout миллисекунд, иначе возвращает false.
Это полезно в основном для асинхронных систем, таких как X11, где окно будет отображено на экране некоторое время после запроса об отображении.
Обратите внимание, что окно, отображённое на экране, может всё ещё не считаться видимым, если область клиенти окна полностью закрыта другими окнами, или если окно по другим причинам не видно. В этом случае функция завершится с таймаутом.
Конкретный случай, когда это происходит, возникает при использовании QGLWidget в качестве виджета области просмотра на macOS: виджет области просмотра получает событие expose, а не родительский виджет.
Эта функция была добавлена в Qt 5.0.
См. также QTest::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 в виде последовательности шестнадцатеричных символов, разделённых пробелами. Если входная строка слишком длинная, она усекается. Об усечении свидетельствует эллипс в конце возвращаемой строки.
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(const std::pair<T1, T2> &pair)
Это перегруженная функция.
Возвращает текстовое представление pair.
Эта функция была добавлена в Qt 5.11.
char *QTest::toString(const QStringView &string)
Это перегруженная функция.
Возвращает текстовое представление заданной string.
Эта функция была добавлена в Qt 5.11.
char *QTest::toString(const QString &string)
Это перегруженная функция.
Возвращает текстовое представление заданной string.
char *QTest::toString(const QLatin1String &string)
Это перегруженная функция.
Возвращает текстовое представление заданной string.
char *QTest::toString(const QByteArray &ba)
Это перегруженная функция.
Возвращает текстовое представление массива байтов ba.
См. также QTest::toHexRepresentation().
char *QTest::toString(const QTime &time)
Это перегруженная функция.
Возвращает текстовое представление заданного time.
char *QTest::toString(const QDate &date)
Это перегруженная функция.
Возвращает текстовое представление заданной date.
char *QTest::toString(const QDateTime &dateTime)
Это перегруженный метод.
Возвращает текстовое представление даты и времени, указанных параметром dateTime.
char *QTest::toString(const QChar &character)
Это перегруженный метод.
Возвращает текстовое представление заданного символа character.
char *QTest::toString(const QPoint &point)
Это перегруженный метод.
Возвращает текстовое представление заданной точки point.
char *QTest::toString(const QSize &size)
Это перегруженный метод.
Возвращает текстовое представление заданного размера size.
char *QTest::toString(const QRect &rectangle)
Это перегруженный метод.
Возвращает текстовое представление заданного прямоугольника rectangle.
char *QTest::toString(const QPointF &point)
Это перегруженный метод.
Возвращает текстовое представление заданной точки point.
char *QTest::toString(const QSizeF &size)
Это перегруженный метод.
Возвращает текстовое представление заданного размера size.
char *QTest::toString(const QRectF &rectangle)
Это перегруженный метод.
Возвращает текстовое представление заданного прямоугольника rectangle.
char *QTest::toString(const QUrl &url)
Это перегруженный метод.
Возвращает текстовое представление заданного URL url.
Этот метод был добавлен в Qt 4.4.
char *QTest::toString(const QUuid &uuid)
Это перегруженный метод.
Возвращает текстовое представление заданного uuid.
Этот метод был добавлен в 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.
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.
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 идентичны, выполнение продолжается. В противном случае в журнале тестов фиксируется ошибка, и дальнейшее выполнение теста прекращается.
В случае сравнения чисел с плавающей точкой (float) и двойной точностью (double), используется qFuzzyCompare() для сравнения. Это означает, что сравнение с 0, скорее всего, завершится ошибкой. Одним из решений является сравнение с 1 и добавление 1 к полученному результату.
QCOMPARE пытается вывести содержимое значений при сбое сравнения, чтобы в журнале тестов было видно, почему сравнение завершилось ошибкой.
Для собственных классов можно использовать QTest::toString() для форматирования значений для вывода в журнал тестов.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Пример:
QCOMPARE(QString("hello").toUpper(), QString("HELLO")); См. также QVERIFY(), QTRY_COMPARE() и QTest::toString().
QEXPECT_FAIL(dataIndex, comment, mode)
Макрос QEXPECT_FAIL() отмечает следующий QCOMPARE() или QVERIFY() как ожидаемую ошибку. Вместо добавления ошибки в журнал тестов, ожидаемая ошибка будет отображена.
Если QVERIFY() или QCOMPARE() помечен как ожидаемая ошибка, но вместо этого проходит, в журнал тестов записывается сообщение об неожиданном успехе (XPASS).
Параметр dataIndex описывает, для какой записи в данных теста ожидается ошибка. Используйте пустую строку (""), если ошибка ожидается для всех записей или если данные теста отсутствуют.
comment будет добавлен в журнал тестов для ожидаемой ошибки.
mode — это QTest::TestFailMode и устанавливает, продолжать ли выполнение теста.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Пример 1:
QEXPECT_FAIL("", "Will fix in the next release", Continue);
QCOMPARE(i, 42);
QCOMPARE(j, 43); В приведённом примере в выходные данные теста будет добавлена информация об ожидаемой ошибке, если переменная i не равна 42. Если переменная i равна 42, будет записано сообщение об неожиданном успехе. Макрос QEXPECT_FAIL() не влияет на второе утверждение QCOMPARE() в примере.
Пример 2:
QEXPECT_FAIL("data27", "Oh my, this is soooo broken", Abort);
QCOMPARE(i, 42); Вышеприведённая тестовая функция не будет продолжать выполнение для записи данных теста data27.
См. также QTest::TestFailMode, QVERIFY() и QCOMPARE().
QFAIL(message)
Этот макрос можно использовать для принудительного создания ошибки теста. Выполнение теста прекращается, а сообщение об ошибке message добавляется в журнал тестов.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком.
Пример:
if (sizeof(int) != 4)
QFAIL("This test has not been ported to this platform yet."); QFETCH(type, name)
Макрос fetch создаёт локальную переменную с именем name и типом type в стеке. name должен соответствовать имени элемента из данных теста. Если такого элемента нет, произойдёт утверждение.
Предположим, у теста есть следующие данные:
void TestQString::toInt_data()
{
QTest::addColumn<QString>("aString");
QTest::addColumn<int>("expected");
QTest::newRow("positive value") << "42" << 42;
QTest::newRow("negative value") << "-42" << -42;
QTest::newRow("zero") << "0" << 0;
} Данные теста содержат два элемента: QString с именем aString и целое число с именем expected. Для получения этих значений в самом тесте:
void TestQString::toInt()
{
QFETCH(QString, aString);
QFETCH(int, expected);
QCOMPARE(aString.toInt(), expected);
} aString и expected — переменные в стеке, инициализированные текущими данными теста.
Примечание: Этот макрос можно использовать только в тестовой функции, вызываемой тестовым фреймворком. У тестовой функции должна быть функция _data.
QFINDTESTDATA(filename)
Возвращает QString для файла данных теста, на который ссылается filename, или пустой QString, если файл данных теста не был найден.
Этот макрос позволяет тесту загружать данные из внешнего файла без жёсткого кодирования абсолютного имени файла в тесте или использования относительных путей, которые могут быть подвержены ошибкам.
Возвращённый путь будет первым из следующего списка, который разрешается в существующий файл или каталог:
- filename относительно QCoreApplication::applicationDirPath() (только если был создан объект QCoreApplication или QApplication).
- filename относительно стандартного каталога установки теста (QLibraryInfo::TestsPath с добавленным в нижнем регистре именем тестового случая).
- filename относительно каталога, содержащего исходный файл, из которого вызван QFINDTESTDATA.
Если указанный файл/каталог не существует ни в одном из этих расположений, в журнал тестов выводится сообщение об ошибке.
Например, в этом коде:
// Source: /home/user/sources/myxmlparser/tests/tst_myxmlparser/tst_myxmlparser.cpp
// Build: /home/user/build/myxmlparser/tests/tst_myxmlparser
// Qt: /usr/local/Qt-5.0.0
void tst_MyXmlParser::parse()
{
MyXmlParser parser;
QString input = QFINDTESTDATA("testxml/simple1.xml");
QVERIFY(parser.parse(input));
} Файл данных теста будет разрешён как первый существующий файл из:
/home/user/build/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml/usr/local/Qt-5.0.0/tests/tst_myxmlparser/testxml/simple1.xml/home/user/sources/myxmlparser/tests/tst_myxmlparser/testxml/simple1.xml
Это позволяет тесту найти свои данные независимо от того, установлен ли тест, и независимо от того, совпадают ли дерево построения теста и дерево исходного кода теста.
Примечание: надёжное обнаружение данных теста из исходного каталога требует, чтобы либо использовался qmake, либо макрос QT_TESTCASE_BUILDDIR был определён, чтобы указать рабочий каталог, из которого вызывается компилятор, или передавались только абсолютные пути к исходным файлам компилятору. В противном случае абсолютный путь к исходному каталогу определить нельзя.
Примечание: Для тестов, использующих макрос QTEST_APPLESS_MAIN() для генерации функции main(), QFINDTESTDATA не будет пытаться найти данные теста относительно QCoreApplication::applicationDirPath(). На практике это означает, что тесты, использующие QTEST_APPLESS_MAIN(), не смогут найти свои данные, если они выполняются из теневого дерева построения.
Эта функция была добавлена в Qt 5.0.
QSKIP(description)
Если вызван из тестовой функции, макрос QSKIP() останавливает выполнение теста без добавления ошибки в журнал тестов. Его можно использовать для пропуска тестов, которые не имеют смысла в текущей конфигурации. Текст description добавляется в журнал тестов и должен содержать объяснение причины невозможности выполнения теста.
Если тест ориентирован на данные, каждый вызов QSKIP() пропускает только текущую строку данных теста, поэтому безусловный вызов QSKIP выведет одно сообщение о пропуске в журнал тестов для каждой строки данных теста.
Если вызван из функции _data, макрос QSKIP() остановит выполнение функции _data и предотвратит выполнение связанной тестовой функции.
Если вызван из initTestCase() или initTestCase_data(), макрос QSKIP() пропустит все тестовые и _data функции.
Примечание: Этот макрос можно использовать только в тестовой функции или функции _data, которые вызываются тестовым фреймворком.
Пример:
if (!QSqlDatabase::drivers().contains("SQLITE"))
QSKIP("This test requires the SQLITE database driver"); QTEST(actual, testElement)
QTEST() — это удобный макрос для QCOMPARE(), который сравнивает значение actual с элементом testElement из данных теста. Если такого элемента нет, тест утверждает.
Помимо этого, QTEST() ведет себя точно так же, как QCOMPARE().
Вместо:
QFETCH(QString, myString);
QCOMPARE(QString("hello").toUpper(), myString); можно написать:
QTEST(QString("hello").toUpper(), "myString"); См. также QCOMPARE().
QTEST_APPLESS_MAIN(TestClass)
Реализует функцию main(), которая выполняет все тесты в TestClass.
Ведёт себя как QTEST_MAIN(), но не создаёт объект QApplication. Используйте этот макрос для очень простых автономных тестов без графического интерфейса.
См. также QTEST_MAIN().
QTEST_GUILESS_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект QCoreApplication и TestClass, и выполняет все тесты в том порядке, в котором они были определены. Используйте этот макрос для создания автономных исполняемых файлов.
Ведёт себя как QTEST_MAIN(), но создаёт объект QCoreApplication вместо объекта QApplication. Используйте этот макрос, если ваш тестовый случай не нуждается в функциональности QApplication, но цикл событий всё же необходим.
Эта функция была добавлена в Qt 5.0.
См. также QTEST_MAIN().
QTEST_MAIN(TestClass)
Реализует функцию main(), которая создаёт объект приложения и TestClass, и выполняет все тесты в том порядке, в котором они были определены. Используйте этот макрос для создания автономных исполняемых файлов.
Если определено QT_WIDGETS_LIB, объект приложения будет QApplication, если определено QT_GUI_LIB, объект приложения будет QGuiApplication, в противном случае — QCoreApplication. Если используется qmake и конфигурация включает QT += widgets, то QT_WIDGETS_LIB будет определено автоматически. Аналогично, если используется qmake и конфигурация включает QT += gui, то QT_GUI_LIB будет определено автоматически.
Примечание: На платформах, где навигация с помощью клавиатуры включена по умолчанию, эта макрос при определении QT_WIDGETS_LIB принудительно её отключит. Это сделано для упрощения использования событий клавиатуры при написании автотестов. Если вам необходимо написать тест-кейс, использующий навигацию с помощью клавиатуры, включите её в функциях initTestCase() или init() своего тест-кейса, вызвав QApplication::setNavigationMode().
Пример:
class TestQString: public QObject { ... };
QTEST_MAIN(TestQString) См. также QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec(), и QApplication::setNavigationMode().
QTRY_COMPARE(actual, expected)
Выполняет сравнение значений actual и expected, вызывая QTRY_COMPARE_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE_WITH_TIMEOUT(), QCOMPARE(), QVERIFY(), и QTRY_VERIFY().
QTRY_COMPARE_WITH_TIMEOUT(actual, expected, timeout)
Макрос QTRY_COMPARE_WITH_TIMEOUT() похож на QCOMPARE(), но выполняет сравнение значений actual и expected многократно, пока значения не станут равными или не истечёт timeout (в миллисекундах). Между каждым сравнением обрабатываются события. Если таймаут истечёт, в журнале тестов будет зафиксирована ошибка, и дальнейшее выполнение теста прекратится.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.0.
См. также QTRY_COMPARE(), QCOMPARE(), QVERIFY(), и QTRY_VERIFY().
QTRY_VERIFY2(condition, message)
Проверяет condition, вызывая QTRY_VERIFY2_WITH_TIMEOUT() с таймаутом в пять секунд. Если condition всё ещё ложно, выводится message. message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData());
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.6.
См. также QTRY_VERIFY2_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QTRY_VERIFY(condition)
Проверяет condition, вызывая QTRY_VERIFY_WITH_TIMEOUT() с таймаутом в пять секунд.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.0.
См. также QTRY_VERIFY_WITH_TIMEOUT(), QTRY_VERIFY2(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QTRY_VERIFY2_WITH_TIMEOUT(condition, message, timeout)
Макрос QTRY_VERIFY2_WITH_TIMEOUT похож на QTRY_VERIFY_WITH_TIMEOUT(), но выводит подробное сообщение message, если condition остаётся ложным после указанного timeout (в миллисекундах). message — обычная строка C.
Пример:
QTRY_VERIFY2_WITH_TIMEOUT(list.size() > 2, QByteArray::number(list.size()).constData(), 10000);
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.6.
См. также QTRY_VERIFY(), QTRY_VERIFY_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QTRY_VERIFY_WITH_TIMEOUT(condition, timeout)
Макрос QTRY_VERIFY_WITH_TIMEOUT() похож на QVERIFY(), но проверяет condition многократно, пока условие не станет истинным или не истечёт timeout (в миллисекундах). Между каждой проверкой обрабатываются события. Если таймаут истечёт, в журнале тестов будет зафиксирована ошибка, и дальнейшее выполнение теста прекратится.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.0.
См. также QTRY_VERIFY(), QTRY_VERIFY2_WITH_TIMEOUT(), QVERIFY(), QCOMPARE(), и QTRY_COMPARE().
QVERIFY2(condition, message)
Макрос QVERIFY2() ведет себя точно так же, как QVERIFY(), за исключением того, что выводит подробное сообщение message, когда condition ложно. message — обычная строка C.
Пример:
QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occurred.");
См. также QVERIFY() и QCOMPARE().
QVERIFY(condition)
Макрос QVERIFY() проверяет, истинно ли condition. Если истинно, выполнение продолжается. Если нет, в журнале тестов фиксируется ошибка, и дальнейшее выполнение теста прекращается.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Пример:
QVERIFY(1 + 1 == 2);
См. также QCOMPARE() и QTRY_VERIFY().
QVERIFY_EXCEPTION_THROWN(expression, exceptiontype)
Макрос QVERIFY_EXCEPTION_THROWN выполняет выражение expression и пытается перехватить исключение, сгенерированное выражением. Если выражение выбросило исключение, и его тип совпадает с exceptiontype, или exceptiontype подразумевается типом сгенерированного исключения (т.е., обычно тип сгенерированного исключения открыто наследуется от exceptiontype), то выполнение продолжится. Если выброшен исключение несовместимого типа, или выражение вообще не выбросило исключение, то в журнале тестов будет зафиксирована ошибка, и дальнейшее выполнение теста прекратится.
Примечание: Эта макрос может быть использована только в тестовой функции, вызываемой тестовым фреймворком.
Данная функция была добавлена в Qt 5.3.
QWARN(message)
Добавляет message в журнал тестов как предупреждение. Этот макрос может использоваться в любом месте ваших тестов.
Примечание: Эта функция безопасна для многопоточной среды.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qtest.html