Spec-Zone.ru › Qt 5.14

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, на которой оно было разработано. Однако гарантируется совместимость исходного кода.

Запуск тестов

Тестовые случаи запускаются с помощью инструментария на 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-движке:

// tst_mytest.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 "tst_mytest.moc"

Включение .moc основано на имени файла .cpp файла. Например, в примере выше, файл .cpp имеет имя tst_mytest.cpp. Если файл был бы назван MyTest.cpp, включение было бы:

#include "MyTest.moc"

Справочник

  • Типы QML
  • API на C++

Лицензии

Qt Quick Test доступен по коммерческим лицензиям от The Qt Company. Кроме того, он доступен по бесплатным лицензиям. Начиная с Qt 5.4, эти лицензии свободного программного обеспечения — GNU Lesser General Public License, version 3 или GNU General Public License, version 2. Подробнее см. Qt Licensing.

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

Spec-Zone.ru

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