【发布时间】:2020-12-23 18:17:10
【问题描述】:
我正在尝试使用 QtQuickTest 进行单元测试,但我收到了一些错误,并且在将它们包含在其他测试中时也遇到了一些问题。
基本上我的 tst_mytest.cpp 文件看起来像这样,取自:https://doc.qt.io/qt-5/qtquicktest-index.html
// tst_mytest.cpp
#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"
现在这个宏 QUICK_TEST_MAIN_WITH_SETUP 运行 main 函数,这意味着我不能在这个 .exe 文件中自己运行它(至少我尝试过并且失败了),然后我只能为引擎设置上下文。
我的 cmake 看起来像这样:
set(TEST_QML_EXE "${PROJECT_NAME}_QML_TEST")
add_executable(${TEST_QML_EXE})
target_sources(${TEST_QML_EXE}
PRIVATE
qml/tst_TestMain.cpp
)
set_property(TARGET ${TEST_QML_EXE} PROPERTY ${PROJECT_NAME}_PRIVATE 1)
target_link_libraries(${TEST_QML_EXE}
PRIVATE
Qt5::Core
Qt5::Quick
Qt5::QuickControls2
Qt5::QuickTest
Qt5::Qml
)
当我运行它时,我得到了
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(399) tid(1498) 800401F0 CoInitialize has not been called.
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(400) tid(1498) 800401F0 CoInitialize has not been called.
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(401) tid(1498) 800401F0 CoInitialize has not been called.
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(402) tid(1498) 800401F0 CoInitialize has not been called.
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(403) tid(1498) 800401F0 CoInitialize has not been called.
onecore\com\combase\objact\objact.cxx(836)\combase.dll!00007FFA0677B2D7: (caller: 00007FFA0677A15C) ReturnHr(404) tid(1498) 800401F0 CoInitialize has not been called.
...重复错误。
到目前为止,我发现这似乎与不打开应用程序实例来运行测试有关,尽管我在与 tst_*.cpp 文件相同的文件夹中创建的 QML 测试运行,但我只是得到了所有每个文件都会出现这些重复错误。
现在,如果我知道如何运行 QUICK_TEST_MAIN_WITH_SETUP 宏而不包含它的 MAIN 部分,这样我就可以在自定义主程序中启动 QCoreApplication,我认为重复错误可能会消失,也许我可以运行所有后端测试在同一个可执行文件中,这将是完美的。
感谢任何帮助
【问题讨论】:
标签: c++ qt unit-testing cmake qml