Spec-Zone.ru › Qt 6.0

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 Licensing.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qtquicktest-index.html

Spec-Zone.ru

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