qt — Интеграционное тестирование: сделать компоненты C ++ видимыми для `qmltestrunner`

Предположим, у меня есть несколько компонентов QML.

Они работают с компонентом или QObject (предположим, что это источник данных, но может быть что угодно, даже старый Horse/Animal/Dog с методом bark()), что я написал в C ++, и я выставляю в моем main.cpp как-то.

В то время как правильный модульный тест, конечно, заглушить его, я могу написать интеграционный тест чтобы увидеть, что они хорошо играют вместе.

Как бы я тогда сделал их видимыми для qmltestrunner?

Если это вообще невозможно, как лучше подходить к интеграционному тестированию компонентов QML и C ++?

1

Решение

Я решил проблему интеграционного тестирования (в которой, помимо описанной вами проблемы, у меня также была проблема с файлами QML, требующими содержимого в файле ресурсов, которое не будет найдено, если мне потребуются компоненты через файловый доступ, как qmltestrunner делает) имея флаг TEST_RUNNER в моем main.cpp который определяет, следует ли запускать обычное приложение или quick_test_main должно быть начато (quick_test_main будучи программно доступным ядром или qmltestrunner). Это выглядит следующим образом:

// define to enable the test harness
#define TEST_RUNNER
#ifdef TEST_RUNNER
#include <QtQuickTest/quicktest.h>
#endif

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

// register components here as you're already doing

#ifndef TEST_RUNNER
// not defined: regular application start
QQmlApplicationEngine engine;

engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));

return app.exec();
#else
// adapt path accordingly
return quick_test_main(argc, argv, "MyTests", "../my_qmltests_path/");
#endif
}

Тестовый пример выглядит следующим образом (обратите внимание, что я загружаю компонент через путь к ресурсу, потому что так работает мое приложение; загрузка через файл не сможет загрузить ресурсы, необходимые для файлов QML …):

import QtQuick 2.0
import QtTest 1.0

TestCase {
name: "MainMenu"
Loader {
id: main_loader
source: "qrc:/qml/main.qml"}

function test_on_off(){
wait(3000);
}
}
1

Другие решения


По вопросам рекламы [email protected]