第一章:编写单元测试
本章展示了如何编写一个简单的单元测试以及如何将测试用例作为一个独立的可执行文件运行。
编写测试
假设您想测试我们的 QString 类的行为。首先,您需要一个包含测试函数的类。这个类必须从 QObject
#include <QTest> class TestQString: public QObject { Q_OBJECT private slots: void toUpper(); };
注意:您需要包含 QTest 头文件并将测试函数声明为私有槽,这样测试框架才能找到并执行它。
然后,您需要实现实际的测试函数。实现可能看起来像这样
void TestQString::toUpper() { QString str = "Hello"; QVERIFY(str.toUpper() == "HELLO"); }
QVERIFY() 宏评估其参数表达式的值。如果该表达式评估为真,则测试函数的执行继续。否则,将失败描述的信息附加到测试日志中,测试函数停止执行。
但是,如果您希望将更详细的信息输出到测试日志中,您应该使用 QCOMPARE() 宏而不是。
如果不等,两个字符串的内容都将附加到测试日志中,使其立即可见为什么比较失败。
准备独立的可执行文件
最后,为了将我们的测试用例变成一个独立的可执行文件,需要以下两行代码
QTEST_MAIN(TestQString)
#include "testqstring.moc"
QTEST_MAIN() 宏扩展为一个简单的 main()
方法,该方法运行所有测试函数。请注意,如果我们的测试类的声明和实现都在一个 .cpp
文件中,我们还需要包含生成的 moc 文件,以便 Qt 的反射功能正常工作。
构建可执行文件
您可以使用 CMake 或 qmake 来构建测试用例可执行文件。
使用 CMake 构建
在您的 CMakeLists.txt
文件中进行构建设置配置
# Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(tutorial1 LANGUAGES CXX) find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets) qt_standard_project_setup() qt_add_executable(tutorial1 testqstring.cpp ) set_target_properties(tutorial1 PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) target_link_libraries(tutorial1 PRIVATE Qt6::Core Qt6::Gui Qt6::Test Qt6::Widgets ) install(TARGETS tutorial1 BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) qt_generate_deploy_app_script( TARGET tutorial1 OUTPUT_SCRIPT deploy_script NO_UNSUPPORTED_PLATFORM_ERROR ) install(SCRIPT ${deploy_script})
接下来,从命令行运行 cmake
或使用位于 Qt-prefix/<version>/<platform>/bin/qt-cmake
的便捷脚本的 qt-cmake
<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja
然后,运行您首选的生成工具来构建可执行文件。这里,我们使用 Ninja
ninja
使用 qmake 构建
在您的 .pro
文件中进行构建设置配置
QT += widgets testlib SOURCES = testqstring.cpp # install target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial1 INSTALLS += target
接下来,运行 qmake
,最后运行 make
来构建您的可执行文件
qmake make
注意:如果您正在使用 Windows,请将 make
替换为 nmake
或您使用的任何其他构建工具。
运行可执行文件
运行生成的可执行文件应显示以下输出
********* Start testing of TestQString ********* Config: Using QtTest library %VERSION%, Qt %VERSION% PASS : TestQString::initTestCase() PASS : TestQString::toUpper() PASS : TestQString::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of TestQString *********
恭喜!您刚刚使用 Qt Test 框架编写并执行了您的第一个单元测试。
© 2024 Qt 公司 Ltd. 本文档的贡献版权属于其各自的所有者。本提供的文档根据自由软件基金会发布的GNU自由文档许可证1.3版本项下的条款提供。Qt及其相应的标志是芬兰以及/或全世界其他国家的Qt公司注册商标。所有其他商标均为其各自所有者的财产。