添加测试
测试您的插件代码有两种主要方法:
两者都有它们特定的用例和设置,将在下一节中进行描述。
设置 CMake
在添加测试之前,准备您的构建文件。它们需要查找 QtTest 依赖项,并具有构建您的插件进行测试的 CMake 选项
# Add a CMake option that enables building your plugin with tests. # You don't want your released plugin binaries to contain tests, # so make that default to 'NO'. # Enable tests by passing -DWITH_TESTS=ON to CMake. option(WITH_TESTS "Builds with tests" NO) if(WITH_TESTS) # Look for QtTest find_package(${QtX} REQUIRED COMPONENTS Test) # Tell CMake functions like add_qtc_plugin about the QtTest component. set(IMPLICIT_DEPENDS Qt::Test) # Enable ctest for auto tests. enable_testing() endif()
插件测试
插件测试紧密集成到您的插件及其与 Qt Creator 的交互中。要测试需要 Qt Creator 或您的插件的基础设施设置的内容,请编写插件测试。
插件测试通过使用命令行参数 -test <pluginname>
启动 Qt Creator 来执行。然后,Qt Creator 完全加载了您的插件及其所有依赖项,经过正常的 插件生命周期。在您的插件及其所有依赖项完全初始化后,您的测试被执行。之后,Qt Creator 会自动关闭。因此,您的插件测试可以访问所有导出的功能,这些功能是您的插件所依赖的 Qt Creator 插件,如 Core::ICore
。使用 QtTest 的正常测试宏,如 QVERIFY
或 QCOMPARE
来报告您的测试成功或失败。
要添加插件测试,请添加一个基于 QObject 的类,该类具有私有槽作为测试,并在您的插件的 ExtensionSystem::IPlugin::initialize() 方法中使用 addTest()
进行注册。使用 WITH_TESTS
对所有测试相关代码进行掩护,以避免将带有测试功能的插件二进制版本发布。
包含 QtTest
#ifdef WITH_TESTS #include <QtTest> #endif
然后实现测试函数
#ifdef WITH_TESTS class MyPluginTests : public QObject { Q_OBJECT private slots: void testMyTest() { // a failing test QVERIFY(false); } }; #endif
在 ExtensionSystem::IPlugin::initialize() 中注册您的测试
#ifdef WITH_TESTS addTest<MyPluginTests>(); #endif
如果您在源文件中声明了测试对象,如本例所示,请包括所需的 Qt 元对象编译器的 .moc
文件
#ifdef WITH_TESTS #include "example.moc" #endif
自动测试
要添加不依赖于正在运行的 Qt Creator 基础设施测试,请使用独立于您的插件界面的自动测试。解析器是一个常见的示例,但如果内容是模块化的,您还可以以这种方式测试很多其他内容。
即使您的测试不在您的插件界面中,如插件测试一样,您仍然可以将测试链接到库,甚至您的插件库本身,以避免代码重复或代码重复编译。
原则上,您可以使用任何自动测试框架,但 QtTest 是一个简单且与 Qt 集成的很好的自动化测试框架,也被用于 插件测试。
要添加您的测试,请添加测试的 C++ 文件,并在您的 CMake 文件中添加测试目标 add_qtc_test
。如果您的测试使用您的插件库,使用 DEPENDS
将其作为依赖项添加。
在以下示例中,插件导出了一个函数 addOne
#pragma once #include "example_global.h" namespace Example { int EXAMPLE_EXPORT addOne(int i); } // namespace Example
并在源文件中实现它
int addOne(int i) { return i; // that is wrong! }
此测试与插件库目标使用 DEPENDS
相关联
# conditionally add auto tests if(WITH_TESTS) add_qtc_test(tst_mytest SOURCES tst_mytest.cpp DEPENDS Example ) endif()
基于 QtTest 的测试接着包含来自插件的头部,并测试该功能
#include "examplefunctions.h" #include <QtTest> class tst_MyTest : public QObject { Q_OBJECT private slots: void mytest(); }; void tst_MyTest::mytest() { // a failing test QCOMPARE(Example::addOne(1), 2); } QTEST_GUILESS_MAIN(tst_MyTest) #include "tst_mytest.moc"
©2024 The Qt Company Ltd. 本文档中包含的贡献均是各自所有者的版权。提供的文档遵照由自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款。Qt及其相关标志是芬兰及其它国家对The Qt Company Ltd的商标。所有其他商标均为各自所有者的财产。