Spec-Zone.ru › Qt 5.12

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/quicktest.h>
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:

#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"

Лицензии

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-5.12/qtquicktest-index.html

Spec-Zone.ru

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