Qt Quick Test
Введение
Qt Quick Test — это фреймворк для модульных тестов приложений QML. Тестовые сценарии написаны как JavaScript-функции внутри типа TestCase:
import QtQuick 2.3
import QtTest 1.0
TestCase {
name: "MathTests"
function test_math() {
compare(2 + 2, 4, "2 + 2 = 4")
}
function test_fail() {
compare(2 + 2, 5, "2 + 2 = 5")
}
} Функции, имена которых начинаются с test_, обрабатываются как тестовые сценарии для выполнения. Подробнее о написании тестовых сценариев см. документацию по типам TestCase и SignalSpy.
Примечание: Гарантии бинарной совместимости для модуля Qt Quick Test нет. Это означает, что приложение, использующее Qt Quick Test, гарантированно будет работать только с той версией Qt, с которой оно было разработано. Однако гарантия совместимости исходного кода есть.
Использование модуля
QML API
Типы QML в Qt Quick Test доступны через импорт QtTest. Для использования типов добавьте следующую директиву импорта в ваш файл .qml:
import QtTest
C++ API
Использование C++ API требует компоновки с библиотекой модуля, либо напрямую, либо через другие зависимости. Несколько инструментов сборки поддерживают это, включая CMake и qmake.
Компоновка с CMake
Используйте команду find_package() для поиска необходимых компонентов модуля в пакете Qt6:
find_package(Qt6 COMPONENTS QuickTest REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::QuickTest)
См. также обзор Компоновки с CMake.
Компоновка с qmake
Есть два способа компоновки с соответствующей C++ библиотекой. Если ваш тестовый проект использует QML TestCase, у вас должна быть следующая строка в файле проекта:
CONFIG += qmltestcase
Это приведет к компоновке теста с C++ библиотекой QtQuickTest.
Если у вас есть тестовый проект только на C++, вы можете добавить следующую строку в файл проекта:
QT += qmltest
Запуск тестов
Тестовые сценарии запускаются с помощью C++ средства, состоящего из следующего кода:
#include <QtQuickTest> QUICK_TEST_MAIN(example)
Где «example» — это идентификатор для уникальной идентификации этого набора тестов. Наконец, добавьте CONFIG += qmltestcase в файл проекта:
TEMPLATE = app TARGET = tst_example CONFIG += warn_on qmltestcase SOURCES += tst_example.cpp
Средство запуска тестов рекурсивно сканирует указанную директорию исходного кода на наличие файлов «tst_*.qml». Если QUICK_TEST_SOURCE_DIR не определено, при запуске средства будет проведено сканирование текущей директории. Другие файлы *.qml могут отображаться для вспомогательных QML-компонентов, используемых в тесте.
Параметр командной строки -input можно задать во время выполнения для запуска тестовых сценариев из другой директории. Это может потребоваться для запуска тестов на целевом устройстве, где имя скомпилированной директории относится к хосту. Например:
tst_example -input /mnt/SDCard/qmltests
Также возможно запустить один файл, используя параметр -input. Например:
tst_example -input data/test.qml
tst_example -input <full_path>/test.qml
Примечание: Для тенёвых сборок может потребоваться указать полный путь к qml-файлу теста.
Если ваш тестовый сценарий требует QML импортов, вы можете добавить их как параметры -import в командную строку программы тестирования.
Если IMPORTPATH указано в вашем файле .pro, каждый путь к импорту, добавленный в IMPORTPATH , будет передан как аргумент командной строки при запуске теста с помощью «make check»:
IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2
Параметр командной строки -functions вернёт список текущих тестовых функций. Можно запустить отдельную тестовую функцию, используя имя функции в качестве аргумента. Например:
tst_example Test_Name::function1
Параметр командной строки -help вернёт все доступные параметры.
tst_example -help
Выполнение C++ кода перед QML тестами
Для выполнения C++ кода перед запуском QML тестов можно использовать макрос QUICK_TEST_MAIN_WITH_SETUP. Это может быть полезно для установки свойств контекста в QML движке, среди прочего.
Макрос идентичен QUICK_TEST_MAIN, за исключением того, что он принимает дополнительный QObject* аргумент. Тестовый фреймворк будет вызывать слоты и вызываемые функции с следующими именами:
| Имя | Назначение | С версии |
|---|---|---|
void applicationAvailable() |
Вызывается сразу после создания объекта QApplication. Используйте эту функцию для выполнения настройки, которая не требует экземпляра QQmlEngine. | Qt 5.12 |
void qmlEngineAvailable(QQmlEngine *) |
Вызывается при наличии QML движка. К этому моменту все пути к импортам, плагинам и дополнительные селекторы файлов будут установлены в движке. Эта функция вызывается один раз для каждого файла QML теста, поэтому любые аргументы уникальны для этого теста. Например, это означает, что каждый файл QML теста будет иметь свой собственный QML движок. Эта функция может использоваться для регистрации QML типов и добавления путей импорта, среди прочего. |
Qt 5.11 |
void cleanupTestCase() |
Вызывается сразу после завершения выполнения теста. Используйте эту функцию для очистки перед началом уничтожения. | Qt 5.12 |
Следующий пример демонстрирует, как можно использовать макрос для установки свойств контекста в QML движке:
// src_qmltest_qquicktest.cpp
#include <QtQuickTest>
#include <QQmlEngine>
#include <QQmlContext>
class Setup : public QObject
{
Q_OBJECT
public:
Setup() {}
public slots:
void qmlEngineAvailable(QQmlEngine *engine)
{
engine->rootContext()->setContextProperty("myContextProperty", QVariant(true));
}
};
QUICK_TEST_MAIN_WITH_SETUP(mytest, Setup)
#include "src_qmltest_qquicktest.moc" Включение .moc основано на имени файла .cpp файла. Например, в примере выше, файл .cpp имеет имя src_qmltest_qquicktest.cpp. Если файл назывался MyTest.cpp, включение было бы:
#include "MyTest.moc"
Справочник
Лицензии
Qt Quick Tests доступен по коммерческим лицензиям от The Qt Company. Кроме того, он доступен по лицензиям свободного программного обеспечения. Начиная с Qt 5.4, эти лицензии свободного программного обеспечения — это GNU Lesser General Public License, версия 3 или GNU General Public License, версия 2. Смотрите Лицензирование Qt для получения дополнительной информации.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qtquicktest-index.html