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