集成测试:使c++组件对“qmltestrunner”可见



假设我有许多QML组件。

它们使用组件或QObject(假设它是一个数据源,但可以是任何东西,甚至是旧的Horse/Animal/Dog与方法bark()),我用c++编写,我以某种方式暴露在我的main.cpp中。

虽然适当的单元测试当然会存根它,但我可能想写一个集成测试,以查看它们在一起很好地工作。

我如何让它们对qmltestrunner可见?

如果根本不可能,那么QML和c++组件集成测试的最佳方法是什么?

我已经解决了这个问题的集成测试(,除了你所描述的问题,我的问题也有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);
    }
}

相关内容

  • 没有找到相关文章

最新更新