Qt Quick Test
简介
Qt Quick Test 是为 QML 应用程序提供的单元测试框架。测试用例以 TestCase 类型中的 JavaScript 函数的形式编写。
import QtQuick 2.3 import QtTest 1.0 TestCase { name: "MathTests" function test_math() { compare(2 + 2, 4, "2 + 2 = 4") } function test_fail() { compare(2 + 2, 5, "2 + 2 = 5") } }
名字以 test_
开头的函数被视为待执行的测试用例。有关编写测试用例的更多信息,请参阅 TestCase 和 SignalSpy 类型的文档。
注意:对 Qt Quick Test 模块没有二进制兼容性保证。这意味着使用 Qt Quick Test 的应用程序仅保证与它开发的 Qt 版本兼容。然而,源代码兼容性是有保证的。
使用模块
QML API
通过 QtTest
导入使用 Qt Quick Test 中的 QML 类型。要使用这些类型,请将以下导入语句添加到您的 .qml 文件中
import QtTest
C++ API
使用 C++ API 需要链接到模块库,无论是直接还是通过其他依赖项。几个构建工具都对此有专门的支持,包括 CMake 和 qmake。
使用 CMake 构建
使用 find_package()
命令查找 Qt6 包中所需的模块组件
find_package(Qt6 REQUIRED COMPONENTS QuickTest) target_link_libraries(mytarget PRIVATE Qt6::QuickTest)
另请参阅使用 CMake 构建概述。
使用 qmake 构建
有两种方法可以将相应的 C++ 库链接起来。如果您的测试项目使用 QML TestCase,则您应该在项目文件中已经有以下行
CONFIG += qmltestcase
这将导致测试链接到 C++ QtQuickTest 库。
如果您有一个仅使用 C++ 的测试项目,可以添加以下行到您的项目文件
QT += qmltest
运行测试
由以下代码组成的 C++ 兜架启动测试用例
#include <QtQuickTest>
QUICK_TEST_MAIN(example)
其中 "example" 是用于唯一标识此组测试的标识符。
使用您最喜欢的生成器配置您的 CMakeLists.txt 文件并构建您的项目。
cmake_minimum_required(VERSION 3.2) project(tst_example LANGUAGES CXX) enable_testing() find_package(Qt6 REQUIRED COMPONENTS QuickTest Qml) #[[The test harness scans the specified source directory recursively for "tst_*.qml" files. By default, it looks in the current directory, which is usually where the executable is. This command makes it look in the project's source directory instead.]] add_definitions(-DQUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") qt_standard_project_setup(REQUIRES 6.6) add_executable(tst_example tst_example.cpp) add_test(NAME tst_example COMMAND tst_example) target_link_libraries(tst_example PRIVATE Qt6::QuickTest Qt6::Qml )
将 CONFIG += qmltestcase
添加到您的项目文件
TEMPLATE = app TARGET = tst_example CONFIG += warn_on qmltestcase SOURCES += tst_example.cpp
如果 .pro 文件中指定了 IMPORTPATH
,则当使用 "make check" 运行测试时,将自动传递为命令行参数添加到 IMPORTPATH
中的每个导入路径。
IMPORTPATH += $$PWD/../imports/my_module1 $$PWD/../imports/my_module2
测试工具会对指定的源目录递归地进行“tst_*.qml”文件搜索。如果没有定义QUICK_TEST_SOURCE_DIR
,则在工具运行时当前目录将被搜索。测试还可能使用其他*.qml文件作为辅助QML组件。
可以在运行时设置-input
命令行选项来从不同的目录运行测试用例。在编译的目录名指向主机时,当在目标设备上运行测试时可能需要这样做。例如
tst_example -input /mnt/SDCard/qmltests
也可以使用-input
选项单独运行一个文件。例如
tst_example -input data/test.qml
tst_example -input <full_path>/test.qml
注意: 指定qml测试文件的完整路径例如在影子构建中需要。
如果测试用例需要导入QML,那么可以将它们作为-import
选项添加到测试程序的命令行中。
-functions
命令行选项会返回当前测试的所有函数列表。可以使用测试函数的名称作为参数来运行单个测试函数。例如
tst_example Test_Name::function1
-help
命令行选项会返回所有可用的选项。
tst_example -help
注意: 即使在测试代码不涉及任何Quick UI的情况下,运行Qt Quick测试用例也总是会在屏幕上显示一个窗口。为了避免这种情况,请在具有-platform offscreen
的测试可执行文件上运行测试。
在QML测试前执行C++
要在运行任何QML测试之前执行C++代码,可以使用QUICK_TEST_MAIN_WITH_SETUP宏。这可以用于设置QML引擎的上下文属性,以及其他之类的功能。
这个宏与QUICK_TEST_MAIN
相同,但是它还包含一个额外的类型参数。测试框架将调用具有以下名称的槽和可调用函数:
名称 | 用途 | 从 |
---|---|---|
void applicationAvailable() | 在QApplication对象实例化之后立即调用。使用此函数执行不需要QQmlEngine实例的设置。 | Qt 5.12 |
void qmlEngineAvailable(QQmlEngine *) | 当QML引擎可用时调用。到此时,任何导入路径、插件路径和额外的文件选择器都将被设置在引擎上。 此函数对每个QML测试文件调用一次,因此任何参数对该测试都是唯一的。这意味着每个QML测试文件都有自己的QML引擎。 此函数可以用于注册QML类型和添加导入路径,以及其他之类的功能。 | Qt 5.11 |
void cleanupTestCase() | 在测试执行完成之后立即调用。使用此函数在开始销毁所有内容之前进行清理。 | Qt 5.12 |
以下示例演示了如何使用这个宏在QML引擎上设置上下文属性:
// src_qmltest_qquicktest.cpp #include <QtQuickTest> #include <QQmlEngine> #include <QQmlContext> #include <QGuiApplication> class Setup : public QObject { Q_OBJECT public: Setup() {} public slots: void applicationAvailable() { // Initialization that only requires the QGuiApplication object to be available } void qmlEngineAvailable(QQmlEngine *engine) { // Initialization requiring the QQmlEngine to be constructed engine->rootContext()->setContextProperty("myContextProperty", QVariant(true)); } void cleanupTestCase() { // Implement custom resource cleanup } }; QUICK_TEST_MAIN_WITH_SETUP(mytest, Setup) #include "src_qmltest_qquicktest.moc"
基于.cpp
文件的文件名设置.moc
包含。例如,在上面的示例中,.cpp
文件的名称是src_qmltest_qquicktest.cpp
。如果文件名为MyTest.cpp
,则包含将如下:
#include "MyTest.moc"
参考
许可证
Qt Quick Tests可在商业许可下从Qt公司获取。此外,它还可在自由软件许可下获取。自Qt 5.4以来,这些自由的软件许可包括GNU Lesser General Public License,版本3或GNU General Public License,版本2。有关更详细的信息,请参阅Qt许可证。
© 2024 The Qt Company Ltd. 此处包含的文档贡献是各自所有者的版权。提供的文档受GNU自由文档许可证(版本1.3)条款的许可,由自由软件基金会发布。Qt及其 respective 标志是芬兰和其他国家的Qt公司有限公司的商标。所有其他商标都是各自所有者的财产。