集成测试:使`qmltestrunner`可以看到C ++组件

时间:2015-09-12 06:57:03

标签: c++ qt testing qml qqmlcomponent

假设我有许多QML组件。

他们使用某个组件或QObject(假设它是一个数据源,但可以是任何内容,甚至是旧的Horse / Animal / Dog使用我在C ++中编写的方法bark()),并以某种方式在main.cpp中公开。

正确的单元测试当然是存根时,我可能想写一个集成测试,看看它们在一起玩得很好。

然后我如何将它们呈现给qmltestrunner

如果根本不可能,那么最好如何进行QML和C ++组件的集成测试?

1 个答案:

答案 0 :(得分:1)

我已经解决了集成测试的问题(除了你所描述的问题之外,对我来说还有QML文件的问题需要资源文件中的东西,如果我需要组件则无法找到通过基于文件的访问,如qmltestrunner所做的那样),在我的TEST_RUNNER中设置一个标记main.cpp,用于确定是应该启动常规应用程序还是应该启动quick_test_main({ {1}}是可编程访问的核心或quick_test_main)。它看起来如下:

qmltestrunner

测试用例如下所示(请注意我通过资源路径加载组件,因为我的应用程序工作原理;通过文件加载将无法加载QML文件所需的资源...):

// 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
}