警告

本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。

第一章:编写单元测试#

如何编写单元测试。

本章首先演示了如何编写一个简单的单元测试以及如何作为一个独立的可执行程序运行测试案例。

编写测试#

假设你想测试我们的 QString 类的行为。首先,你需要一个包含你的测试函数的类。这个类必须继承自 QObject

from PySide6.QtTest import QTest
class TestQString(QObject):

    Q_OBJECT
# private slots
    def toUpper():

注意

你需要包含 QTest 头文件,并将测试函数声明为私有槽,这样测试框架才能找到并执行它。

然后你需要实现测试函数本身。实现可能看起来像这样

def toUpper(self):

    str = "Hello"
    QVERIFY(str.toUpper() == "HELLO")

`${QVERIFY()} 宏评估传递给它的表达式。如果表达式评估为 true,则继续执行测试函数。否则,将描述失败的错误消息附加到测试日志中,并停止执行测试函数。

但是,如果你想为测试日志提供更详细的输出,你应该使用 `${QCOMPARE()} 宏而不是 `${QVERIFY()`。

def toUpper(self):

    str = "Hello"
    QCOMPARE(str.toUpper(), QString("HELLO"))

如果字符串不相等,两个字符串的内容都将附加到测试日志中,使其立即可见比较失败的原因。

准备独立可执行文件#

最后,为了使我们的测试案例成为独立的可执行文件,需要以下两行

QTEST_MAIN(TestQString)
from testqstring.moc import *

`${QTEST_MAIN()} 宏扩展为一个简单的 ${main()} 方法,用于运行所有测试函数。注意,如果我们的测试类的声明和实现都在一个 ${.cpp} 文件中,我们还需要包含生成的 moc 文件,以便 Qt 的反射功能正常工作。

构建可执行文件#

你可以使用 CMake 或 qmake 构建测试案例的可执行文件。

使用 CMake 构建#

在你 ${CMakeLists.txt} 文件中配置你的构建设置

<Code snippet "/data/qt5-full-670/6.7.0/Src/qtbase/tutorial1/CMakeLists.txt" not found>

接下来,从命令行运行 ${cmake} 或使用位于 ${Qt-prefix///bin/qt-cmake} 的便捷脚本 <${qt-cmake}

<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja

然后,运行你喜欢的生成工具来构建可执行文件。这里,我们使用 Ninja

ninja

使用 qmake 构建#

在你 ${.pro} 文件中配置你的构建设置

<Code snippet "/data/qt5-full-670/6.7.0/Src/qtbase/tutorial1/tutorial1.pro" not found>

接下来,运行 <${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 测试框架编写并执行了您的第一个单元测试。