Тип QML TestCase
Представляет собой тестовый случай для модульного тестирования. Подробнее...
| Заявление об импорте: | import QtTest 1.1 |
| Наследуется от: |
Свойства
Методы
- 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 Test Cases
Тестовые случаи записываются в виде функций 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 и 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, а затем использовать обычное сравнение:
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 миллисекунд или пока для item не будет вызван updatePolish().
Возвращает 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.1/qml-qttest-testcase.html