LINUX.ORG.RU

Unit тесты в qml

 , ,


0

3

Всем привет! Знающие люди, подскажите пожалуйста, как делать юнит тесты в qml? Вроде для этого есть специальный тип TestCase, но как быть если мои qml файлы зависят от объекта в c++ ?

Никакой разницы, зависит или нет. При запуске он должен найти плагин с этим объектом, этого достаточно.

unC0Rr ★★★★★ ()
Ответ на: комментарий от unC0Rr

Вот например у меня есть такой проект: main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "testclass.h"
#include <QDebug>
#include <QSettings>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    TestClass t;
    engine.rootContext()->setContextProperty("testclass", new TestClass());
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));

    return app.exec();
}

testclass.h
#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <QObject>


class TestClass : public QObject
{
    Q_OBJECT

public:
    TestClass();
    Q_INVOKABLE int func();
};

#endif // TESTCLASS_H

testclass.cpp
#include "testclass.h"

TestClass::TestClass()
{

}

int TestClass::func()
{
    return 100;
}

main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Button {
        anchors.fill: parent

        onClicked: {
            console.log(testclass.func())
        }
    }
}
Ну и как мне в юнит тестах получить доступ к testclass ?

username007 ()
Ответ на: комментарий от username007

По-моему с таким подходом не получится воспользоваться стандартным QUICK_TEST_MAIN. Вижу два варианта:

  1. Забить на тестовый фреймворк и сделать своё приложение для тестирования
  2. Написать плагин для своих классов и грузить его через import.

Второй подход крайне рекомендую, даже если не используешь тесты.

unC0Rr ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.