Spec-Zone.ru › Qt 5.15

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

Spec-Zone.ru

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