Тип QML TestCase
Представляет собой тестовый случай для юнит-тестирования. Подробнее...
| Оператор импорта: | import QtTest 1.0 |
| Наследуется от: |
Свойства
Методы
- cleanup()
- cleanupTestCase()
- compare(actual, expected, message)
- object createTemporaryObject(Component component, object parent, object properties)
- object createTemporaryQmlObject(string qml, object parent, string filePath)
- expectFail(tag, message)
- expectFailContinue(tag, message)
- fail(message)
- QtObject findChild(parent, objectName)
- fuzzyCompare(actual, expected, delta, message)
- object grabImage(item)
- ignoreWarning(message)
- init()
- initTestCase()
- bool isPolishScheduled(object item)
- keyClick(key, modifiers, delay)
- keyPress(key, modifiers, delay)
- keyRelease(key, modifiers, delay)
- keySequence(keySequence)
- mouseClick(item, x, y, button, modifiers, delay)
- mouseDoubleClickSequence(item, x, y, button, modifiers, delay)
- mouseDrag(item, x, y, dx, dy, button, modifiers, delay)
- mouseMove(item, x, y, delay, buttons)
- mousePress(item, x, y, button, modifiers, delay)
- mouseRelease(item, x, y, button, modifiers, delay)
- mouseWheel(item, x, y, xDelta, yDelta, button, modifiers, delay)
- skip(message)
- sleep(ms)
- TouchEventSequence touchEvent(object item)
- tryCompare(obj, property, expected, timeout, message)
- tryVerify(function, timeout, message)
- verify(condition, message)
- wait(ms)
- bool waitForItemPolished(object item, int timeout)
- waitForRendering(item, timeout)
- warn(message)
Подробное описание
Введение в тестовые случаи QML
Тестовые случаи записываются как функции JavaScript внутри типа TestCase:
import QtQuick 2.0
import QtTest 1.2
TestCase {
name: "MathTests"
function test_math() {
compare(2 + 2, 4, "2 + 2 = 4")
}
function test_fail() {
compare(2 + 2, 5, "2 + 2 = 5")
}
} Функции, имена которых начинаются с «test_», обрабатываются как тестовые случаи, которые необходимо выполнить. Свойство name используется для добавления префикса к функциям в выводе:
********* Start testing of MathTests ********* Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : MathTests::initTestCase() FAIL! : MathTests::test_fail() 2 + 2 = 5 Actual (): 4 Expected (): 5 Loc: [/home/.../tst_math.qml(12)] PASS : MathTests::test_math() PASS : MathTests::cleanupTestCase() Totals: 3 passed, 1 failed, 0 skipped ********* Finished testing of MathTests *********
Из-за того, как работают свойства JavaScript, порядок нахождения тестовых функций непредсказуем. Чтобы помочь с предсказуемостью, тестовый фреймворк отсортирует функции по возрастанию имени. Это может быть полезно, когда нужно выполнить два теста в определенном порядке.
Можно предоставить несколько типов TestCase. Программа тестирования завершится, как только они все будут завершены. Если тестовый случай не нужно запускать (потому что условие предварительной подготовки не выполнено), то optional можно установить в значение true.
Тесты с данными
Табличные данные могут быть предоставлены для теста с помощью имени функции, заканчивающегося на «_data». В качестве альтернативы, функция init_data() может использоваться для предоставления данных по умолчанию для всех тестовых функций в типе TestCase:
import QtQuick 2.0
import QtTest 1.2
TestCase {
name: "DataTests"
function init_data() {
return [
{tag:"init_data_1", a:1, b:2, answer: 3},
{tag:"init_data_2", a:2, b:4, answer: 6}
];
}
function test_table_data() {
return [
{tag: "2 + 2 = 4", a: 2, b: 2, answer: 4 },
{tag: "2 + 6 = 8", a: 2, b: 6, answer: 8 },
]
}
function test_table(data) {
//data comes from test_table_data
compare(data.a + data.b, data.answer)
}
function test__default_table(data) {
//data comes from init_data
compare(data.a + data.b, data.answer)
}
} Тестовый фреймворк будет перебирать все строки таблицы и передавать каждую строку тестовой функции. Как показано, столбцы можно извлечь для использования в тесте. Столбец tag специальный — он печатается тестовым фреймворком, когда строка завершается неудачно, чтобы помочь читателю определить, какой случай завершился неудачно среди набора в противном случае проходящих тестов.
Benchmarks
Функции, имена которых начинаются с «benchmark_», будут выполняться несколько раз с помощью фреймворка Qt для бенчмаркинга, и для прогонов будет сообщаться среднее значение времени. Это эквивалентно использованию макроса QBENCHMARK в C++ версии QTestLib.
TestCase {
id: top
name: "CreateBenchmark"
function benchmark_create_component() {
var component = Qt.createComponent("item.qml")
var obj = component.createObject(top)
obj.destroy()
component.destroy()
}
}
RESULT : CreateBenchmark::benchmark_create_component:
0.23 msecs per iteration (total: 60, iterations: 256)
PASS : CreateBenchmark::benchmark_create_component() Чтобы получить эффект макроса QBENCHMARK_ONCE, добавьте префикс «benchmark_once_» к имени тестовой функции.
Моделирование событий клавиатуры и мыши
Методы keyPress(), keyRelease() и keyClick() могут быть использованы для моделирования событий клавиатуры в рамках юнит-тестов. События передаются текущему активному элементу QML. Можно передать значение перечисления Qt.Key или символ latin1 (строка длиной один)
Rectangle {
width: 50; height: 50
focus: true
TestCase {
name: "KeyClick"
when: windowShown
function test_key_click() {
keyClick(Qt.Key_Left)
keyClick("a")
...
}
}
} Методы mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence() и mouseMove() могут быть использованы для моделирования событий мыши аналогичным образом.
Примечание: События клавиатуры и мыши могут быть переданы только после того, как главное окно было отображено. Попытки передачи событий до этого момента завершатся неудачей. Используйте свойства when и windowShown, чтобы отслеживать, когда было показано главное окно.
Управление динамически созданными тестовыми объектами
Типичный шаблон в QML-тестах заключается в динамическом создании элемента, а затем его уничтожении в конце тестовой функции:
TestCase {
id: testCase
name: "MyTest"
when: windowShown
function test_click() {
var item = Qt.createQmlObject("import QtQuick 2.0; Item {}", testCase);
verify(item);
// Test item...
item.destroy();
}
} Проблема с этим шаблоном заключается в том, что любые ошибки в тестовой функции приведут к пропуску вызова item.destroy(), оставляя элемент висящим в сцене до завершения тестового случая. Это может привести к вмешательству в будущие тесты; например, блокированием событий ввода или созданием не связанного с кодом отладочного вывода, что затрудняет отслеживание выполнения кода.
Вызов createTemporaryQmlObject() вместо этого гарантирует, что объект будет уничтожен в конце тестовой функции:
TestCase {
id: testCase
name: "MyTest"
when: windowShown
function test_click() {
var item = createTemporaryQmlObject("import QtQuick 2.0; Item {}", testCase);
verify(item);
// Test item...
// Don't need to worry about destroying "item" here.
}
} Для объектов, созданных с помощью функции createObject() компонента Component, можно использовать функцию createTemporaryObject().
См. также SignalSpy и Qt Quick Test.
Документация по свойствам
completed : bool
Это свойство будет установлено в значение true, как только тестовый случай завершит выполнение. Тестовые случаи выполняются только один раз. Начальное значение — false.
name : string
Это свойство определяет имя тестового случая для отчета о результатах. Значение по умолчанию — пустая строка.
TestCase {
name: "ButtonTests"
...
} optional : bool
В приложении для тестирования могут быть предоставлены несколько типов TestCase. Приложение завершится, как только все они будут выполнены. Если для выполнения тестового случая нет необходимости (потому что предварительное условие не выполнено), то этот свойство можно установить в значение true. Значение по умолчанию — false.
TestCase {
when: false
optional: true
function test_not_run() {
verify(false)
}
} running : bool
Это свойство будет установлено в true, пока тестовый случай выполняется. Начальное значение — false, и значение снова станет false, как только тестовый случай завершится.
when : bool
Это свойство должно быть установлено в true, когда приложение хочет запустить тестовые случаи. Значение по умолчанию — true. В следующем примере тест выполняется при нажатии пользователем кнопки мыши:
Rectangle {
id: foo
width: 640; height: 480
color: "cyan"
MouseArea {
id: area
anchors.fill: parent
}
property bool bar: true
TestCase {
name: "ItemTests"
when: area.pressed
id: test1
function test_bar() {
verify(bar)
}
}
} Приложение для тестирования завершится, как только все типы TestCase будут активированы и выполнены. Свойство optional может использоваться для исключения типа TestCase.
См. также optional и completed.
windowShown : bool
Это свойство будет установлено в true после отображения окна просмотра QML. Обычно тестовые случаи запускаются сразу после загрузки приложения для тестирования и до отображения окна. Если тестовый случай включает визуальные типы и поведение, то его может потребоваться отложить до отображения окна.
Button {
id: button
onClicked: text = "Clicked"
TestCase {
name: "ClickTest"
when: windowShown
function test_click() {
button.clicked();
compare(button.text, "Clicked");
}
}
} Документация по методам
cleanup()
Эта функция вызывается после каждой тестовой функции, которая выполняется в типе TestCase. Реализация по умолчанию ничего не делает. Приложение может предоставить собственную реализацию для выполнения очистки после каждой тестовой функции.
См. также init() и cleanupTestCase().
cleanupTestCase()
Эта функция вызывается после завершения всех других тестовых функций в типе TestCase. Реализация по умолчанию ничего не делает. Приложение может предоставить собственную реализацию для выполнения очистки тестового случая.
См. также initTestCase() и cleanup().
compare(actual, expected, message = "")
Прерывает текущий тестовый случай, если actual не совпадает с expected, и отображает необязательное message. Аналогично QCOMPARE(actual, expected) в C++.
См. также tryCompare() и fuzzyCompare.
[since 5.9] object createTemporaryObject(Component component, object parent, object properties)
Эта функция динамически создает объект QML из заданного component с указанным необязательным parent и properties. Возвращаемый объект будет уничтожен (если он ещё не был) после того, как cleanup() завершит выполнение, что означает, что объекты, созданные с помощью этой функции, гарантированно будут уничтожены после каждого теста, независимо от того, завершаются ли тесты успешно.
Если при создании объекта произошла ошибка, будет возвращено null.
Эта функция вызывает component.createObject() внутри.
Этот метод был представлен в Qt 5.9.
См. также Управление динамически созданными тестовыми объектами.
[since 5.9] object createTemporaryQmlObject(string qml, object parent, string filePath)
Эта функция динамически создает объект QML из заданной строки qml со указанным parent. Возвращаемый объект будет уничтожен (если он ещё не был) после того, как cleanup() завершит выполнение, что означает, что объекты, созданные с помощью этой функции, гарантированно будут уничтожены после каждого теста, независимо от того, завершаются ли тесты успешно.
Если при создании объекта произошла ошибка, будет возвращено null.
Если указан filePath, он будет использоваться для отчётов об ошибках созданного объекта.
Эта функция вызывает Qt.createQmlObject() внутри.
Этот метод был представлен в Qt 5.9.
См. также Управление динамически созданными тестовыми объектами.
expectFail(tag, message)
В тестовом случае с данными отмечает строку, связанную с tag, как ожидающуюся ошибку. При возникновении ошибки отобразите message, прервите тест и отметьте тест как пройденный. Аналогично QEXPECT_FAIL(tag, message, Abort) в C++.
Если тест не основан на данных, то tag должен быть пустой строкой.
См. также expectFailContinue().
expectFailContinue(tag, message)
В тестовом случае с данными отмечает строку, связанную с tag, как ожидающуюся ошибку. При возникновении ошибки отобразите message и продолжите тест. Аналогично QEXPECT_FAIL(tag, message, Continue) в C++.
Если тест не основан на данных, то tag должен быть пустой строкой.
См. также expectFail().
fail(message = "")
Прерывает текущий тестовый случай с необязательным сообщением message. Аналогично QFAIL(message) в C++.
[since 5.4] QtObject findChild(parent, objectName)
Возвращает первого потомка parent с objectName, или null, если такой элемент не существует. Ищутся как визуальные, так и невизуальные потомки рекурсивно, причём визуальные потомки ищутся в первую очередь.
compare(findChild(item, "childObject"), expectedChildObject);
Этот метод был представлен в Qt 5.4.
fuzzyCompare(actual, expected, delta, message = "")
Прерывает текущий тестовый случай, если различие между actual и expected больше, чем delta, и отображает необязательное message. Аналогично qFuzzyCompare(actual, expected) в C++, но с требуемым значением delta.
Эта функция также может использоваться для сравнения цветов, если оба значения actual и expected могут быть преобразованы в значения цвета. Если какое-либо из различий для значений канала RGBA больше, чем delta, тест завершается неудачей.
См. также tryCompare() и compare().
object grabImage(item)
Возвращает снимок изображения заданного item.
Возвращаемый объект изображения имеет следующие свойства:
- width Возвращает ширину базового изображения (с версии 5.10)
- height Возвращает высоту базового изображения (с версии 5.10)
- size Возвращает размер базового изображения (с версии 5.10)
Кроме того, возвращаемый объект изображения имеет следующие методы:
-
red(x, y)Возвращает значение красного канала пикселя в позиции x, y -
green(x, y)Возвращает значение зелёного канала пикселя в позиции x, y -
blue(x, y)Возвращает значение синего канала пикселя в позиции x, y -
alpha(x, y)Возвращает значение альфа-канала пикселя в позиции x, y -
pixel(x, y)Возвращает значение цвета пикселя в позиции x, y -
equals(image)Возвращаетtrue, если это изображение идентично изображению image - см. QImage::operator== (с версии 5.6)Например:
var image = grabImage(rect); compare(image.red(10, 10), 255); compare(image.pixel(20, 20), Qt.rgba(255, 0, 0, 255)); rect.width += 10; var newImage = grabImage(rect); verify(!newImage.equals(image));
-
save(path)Сохраняет изображение в заданном path. Если изображение не может быть сохранено, будет выброшено исключение. (с версии 5.10)Это может быть полезно для проведения анализа после завершения неудачных тестов, например:
var image = grabImage(rect); try { compare(image.width, 100); } catch (ex) { image.save("debug.png"); throw ex; }
ignoreWarning(message)
Отмечает message как проигнорированное сообщение об ошибке. При его появлении предупреждение не будет выведено, и тест пройдёт. Если сообщение не появится, тест завершится неудачей. Аналогично QTest::ignoreMessage(QtWarningMsg, message) в C++.
С Qt 5.12, message может быть строкой или регулярным выражением, задающим шаблон сообщений для игнорирования.
Например, следующий фрагмент проигнорирует предупреждение в виде строки:
ignoreWarning("Something sort of bad happened") А следующий фрагмент проигнорирует регулярное выражение, соответствующее нескольким возможным предупреждениям:
ignoreWarning(new RegExp("[0-9]+ bad things happened")) Примечание: Несмотря на то, что это объект JavaScript RegExp, он не будет интерпретирован как таковой; вместо этого шаблон будет передан в QRegularExpression.
См. также warn().
init()
Эта функция вызывается перед каждой тестовой функцией, которая выполняется в типе TestCase. Реализация по умолчанию ничего не делает. Приложение может предоставить собственную реализацию для выполнения инициализации перед каждой тестовой функцией.
См. также cleanup() и initTestCase().
initTestCase()
Эта функция вызывается перед любыми другими тестовыми функциями в типе TestCase. По умолчанию реализация ничего не делает. Приложение может предоставить свою собственную реализацию для инициализации тестового случая.
См. также cleanupTestCase() и init().
[since 5.13] bool isPolishScheduled(object item)
Возвращает true если updatePolish() не был вызван для item с момента последнего вызова polish(), в противном случае возвращает false.
При назначении значений свойствам в QML любое макетирование, которое должно выполняться элементом в результате назначения, может не выполняться немедленно, а может быть отложено до полировки элемента. В таких случаях вы можете использовать эту функцию для гарантии, что элемент был отполирован до продолжения выполнения теста. Например:
verify(isPolishScheduled(item)) verify(waitForItemPolished(item))
Без вызова isPolishScheduled() выше, вызов waitForItemPolished() мог заметить, что полировка не запланирована, и поэтому пройти мгновенно, предположив, что элемент уже был отполирован. Эта функция показывает, почему элемент не был отполирован, и позволяет тестам проваливаться раньше в таких ситуациях.
Этот метод был введен в Qt 5.13.
См. также waitForItemPolished(), QQuickItem::polish() и QQuickItem::updatePolish().
keyClick(key, modifiers = Qt.NoModifier, delay = -1)
Имитирует нажатие клавиши key с необязательными modifiers на текущем фокусированном элементе. Если delay больше 0, тест подождет delay миллисекунд.
Событие будет отправлено окну TestCase, или, в случае нескольких окон, текущему активному окну. Подробнее см. QGuiApplication::focusWindow().
См. также keyPress() и keyRelease().
keyPress(key, modifiers = Qt.NoModifier, delay = -1)
Имитирует нажатие клавиши key с необязательными modifiers на текущем фокусированном элементе. Если delay больше 0, тест подождет delay миллисекунд.
Событие будет отправлено окну TestCase, или, в случае нескольких окон, текущему активному окну. Подробнее см. QGuiApplication::focusWindow().
Примечание: В какой-то момент вы должны отпустить клавишу с помощью keyRelease().
См. также keyRelease() и keyClick().
keyRelease(key, modifiers = Qt.NoModifier, delay = -1)
Имитирует отпускание клавиши key с необязательными modifiers на текущем фокусированном элементе. Если delay больше 0, тест подождет delay миллисекунд.
Событие будет отправлено окну TestCase, или, в случае нескольких окон, текущему активному окну. Подробнее см. QGuiApplication::focusWindow().
См. также keyPress() и keyClick().
[since 5.10] keySequence(keySequence)
Имитирует нажатие последовательности клавиш keySequence. Последовательность клавиш может быть установлена на одну из стандартных комбинаций клавиш, или она может быть описана строкой, содержащей последовательность до четырёх нажатий клавиш.
Каждое событие будет отправлено окну TestCase, или, в случае нескольких окон, текущему активному окну. Подробнее см. QGuiApplication::focusWindow().
Этот метод был введен в Qt 5.10.
См. также keyPress(), keyRelease(), GNU Emacs Style Key Sequences и Shortcut.sequence.
mouseClick(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует нажатие кнопки мыши button с необязательными modifiers на элементе item. Позиция щелчка определяется x и y. Если x и y не определены, позиция будет в центре элемента item. Если delay указан, тест подождёт указанное количество миллисекунд перед нажатием и отпусканием кнопки.
Позиция, заданная x и y, преобразуется из системы координат item в координаты окна и затем передаётся. Если item закрыт другим элементом или дочерний элемент item занимает эту позицию, то событие будет передано другому элементу вместо этого.
См. также mousePress(), mouseRelease(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() и mouseWheel().
mouseDoubleClickSequence(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует полную последовательность событий, генерируемых двойным щелчком кнопки мыши button с необязательными modifiers на элементе item.
Этот метод воспроизводит последовательность событий мыши, генерируемых, когда пользователь делает двойной щелчок: Нажатие-Отпускание-Нажатие-Двойной щелчок-Отпускание.
Позиция щелчка определяется x и y. Если x и y не определены, позиция будет в центре элемента item. Если delay указан, тест подождёт указанное количество миллисекунд перед нажатием и отпусканием кнопки.
Позиция, заданная x и y, преобразуется из системы координат item в координаты окна и затем передаётся. Если item закрыт другим элементом или дочерний элемент item занимает эту позицию, то событие будет передано другому элементу вместо этого.
Этот метод QML был введен в Qt 5.5.
См. также mousePress(), mouseRelease(), mouseClick(), mouseMove(), mouseDrag() и mouseWheel().
mouseDrag(item, x, y, dx, dy, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует перетаскивание мыши на элементе item с нажатой кнопкой button и необязательными modifiers. Начальная позиция перетаскивания задаётся x и y, а расстояние перетаскивания задаётся dx и dy. Если delay указан, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
Позиция, заданная x и y, преобразуется из системы координат item в координаты окна и затем передаётся. Если item закрыт другим элементом или дочерний элемент item занимает эту позицию, то событие будет передано другому элементу вместо этого.
См. также mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease() и mouseWheel().
mouseMove(item, x = item.width / 2, y = item.height / 2, delay = -1, buttons = Qt.NoButton)
Перемещает указатель мыши в позицию, заданную x и y внутри элемента item, удерживая buttons, если заданы. Начиная с Qt 6.0, если x и y не определены, позиция будет в центре элемента item.
Если задан delay (в миллисекундах), тест подождёт перед перемещением указателя мыши.
Позиция, заданная x и y, преобразуется из системы координат item в координаты окна и затем передаётся. Если item закрыт другим элементом или дочерний элемент item занимает эту позицию, то событие будет передано другому элементу вместо этого.
См. также mousePress(), mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseDrag() и mouseWheel().
mousePress(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует нажатие кнопки мыши button с необязательными modifiers на элементе item. Позиция определяется x и y. Если x или y не определены, позиция будет в центре элемента item. Если delay указан, тест подождёт указанное количество миллисекунд перед нажатием.
Позиция, заданная координатами x и y, преобразуется из системы координат item в координаты окна и затем передается. Если item скрыт другим элементом или элемент item занимает эту позицию, событие будет передано вместо этого другому элементу.
См. также mouseRelease(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() и mouseWheel().
mouseRelease(item, x = item.width / 2, y = item.height / 2, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует отпускание кнопки мыши button с необязательными modifiers на элементе item. Позиция отпускания определяется координатами x и y. Если x или y не определены, позиция будет центром элемента item. Если задан delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
Позиция, заданная координатами x и y, преобразуется из системы координат item в координаты окна и затем передается. Если item скрыт другим элементом или элемент item занимает эту позицию, событие будет передано вместо этого другому элементу.
См. также mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseDrag() и mouseWheel().
mouseWheel(item, x, y, xDelta, yDelta, button = Qt.LeftButton, modifiers = Qt.NoModifier, delay = -1)
Имитирует вращение колеса мыши на элементе item при нажатой кнопке button с необязательными modifiers. Позиция события колеса определяется координатами x и y. Если задан delay, тест подождёт указанное количество миллисекунд перед отпусканием кнопки.
Позиция, заданная координатами x и y, преобразуется из системы координат item в координаты окна и затем передается. Если item скрыт другим элементом или элемент item занимает эту позицию, событие будет передано вместо этого другому элементу.
xDelta и yDelta содержат расстояние вращения колеса в восьмых градусах. См. QWheelEvent::angleDelta() для получения дополнительной информации.
См. также mousePress(), mouseClick(), mouseDoubleClickSequence(), mouseMove(), mouseRelease(), mouseDrag() и QWheelEvent::angleDelta().
skip(message = "")
Пропускает текущий тестовый случай и выводит необязательное сообщение message. Если это тест с данными, пропускается только текущая строка. Аналогично QSKIP(message) в C++.
sleep(ms)
Засыпает на ms миллисекунд без обработки событий Qt.
См. также wait() и waitForRendering().
[since 5.9] TouchEventSequence touchEvent(object item)
Начинает последовательность событий касания через имитированный сенсорный экран (QPointingDevice). События передаются окну, содержащему item.
Возвращаемый объект используется для перечисления событий, которые должны быть переданы через один QTouchEvent. Касания передаются окну, содержащему TestCase, если не указано иное.
Этот метод был добавлен в Qt 5.9.
См. также TouchEventSequence::press(), TouchEventSequence::move(), TouchEventSequence::release(), TouchEventSequence::stationary(), TouchEventSequence::commit() и QInputDevice::DeviceType.
tryCompare(obj, property, expected, timeout = 5000, message = "")
Прерывает текущий тестовый случай, если указанное свойство property объекта obj не совпадает с expected, и отображает необязательное сообщение message. Тест будет повторён несколько раз до тех пор, пока не будет достигнут timeout (в миллисекундах).
Эта функция предназначена для тестирования приложений, где значение свойства изменяется на основе асинхронных событий. Используйте compare() для проверки синхронных изменений свойства.
SignalSpy::wait() предоставляет альтернативный способ ожидания события сигнала.
См. также compare() и SignalSpy::wait().
[since 5.8] tryVerify(function, timeout = 5000, message = "")
Прерывает текущий тестовый случай, если функция function не вернёт значение true до истечения заданного timeout (в миллисекундах). Функция оценивается несколько раз до достижения таймаута. Необязательное сообщение message отображается при ошибке.
Эта функция предназначена для тестирования приложений, где состояние меняется на основе асинхронных событий. Используйте verify() для проверки синхронных изменений состояния и tryCompare() для проверки асинхронных изменений свойств.
Например, в коде ниже нельзя использовать tryCompare(), потому что свойство currentItem может быть null на короткий период времени:
tryCompare(listView.currentItem, "text", "Hello");
Вместо этого мы можем использовать tryVerify(), чтобы сначала проверить, что currentItem не null, а затем использовать обычный compare:
tryVerify(function(){ return listView.currentItem })
compare(listView.currentItem.text, "Hello") Этот метод был добавлен в Qt 5.8.
См. также verify(), compare(), tryCompare() и SignalSpy::wait().
verify(condition, message = "")
Прерывает текущий тестовый случай, если условие condition ложно, и отображает необязательное сообщение message. Аналогично QVERIFY(condition) или QVERIFY2(condition, message) в C++.
wait(ms)
Ожидает ms миллисекунд, обрабатывая события Qt.
См. также sleep() и waitForRendering().
[since 5.13] bool waitForItemPolished(object item, int timeout = 5000)
Ожидает timeout миллисекунд или пока updatePolish() не будет вызвано для item.
Возвращает true если updatePolish() было вызвано для item в течение timeout миллисекунд, иначе возвращает false.
Этот метод был добавлен в Qt 5.13.
См. также isPolishScheduled(), QQuickItem::polish() и QQuickItem::updatePolish().
waitForRendering(item, timeout = 5000)
Ожидает timeout миллисекунд или пока элемент item не будет отрисован рендерером. Возвращает true, если item отрисован в течение timeout миллисекунд, в противном случае возвращает false. Значение по умолчанию для timeout — 5000.
warn(message)
Выводит message как предупреждение. Аналогично QWARN(message) в C++.
См. также ignoreWarning().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qml-qttest-testcase.html