Spec-Zone.ru › Qt 5.13

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
  • C++ API

Лицензии

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

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

Spec-Zone.ru

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