Spec-Zone.ru › Qt 6.1

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"

Справочник

  • QML типы
  • C++ API

Лицензии

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API