C++ 测试入门指南:如何起步而不迷失方向

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么你的 C++ 代码需要保护?

\n\n

想象一下,你编写了一个 C++ 程序。它编译无误,运行起来,甚至产生了一些结果。你如释重负地松了口气,然后将代码发布到生产环境。但一天后,你的同事告诉你:“嘿,你的 calculateSum 函数在传入负数时会崩溃。” 于是你开始疯狂地寻找 bug,重读数百行代码。

\n\n

熟悉这种情况吗?如果是,那你来对地方了。C++ 测试 并非枯燥的官僚程序,而是你抵御此类事件的个人护盾。在本文中,我们将探讨初学者如何开始 C++ 测试,而无需深入理论细节。你将了解使用哪些工具、如何编写第一个测试,以及为什么这能为你节省数小时的精力。

\n\n

什么是单元测试,为什么需要它?

\n\n

单元测试(或模块测试)是对代码中各个“积木块”(函数、类、方法)的检查。你编写一个小程序,用特定数据调用你的函数,并检查结果是否符合预期。

\n\n

为什么初学者需要它?

\n
    \n
  • 安心:你确切知道你的代码能正常工作。
  • \n
  • 速度:你不害怕进行更改,因为测试会立即告诉你是否有东西损坏。
  • \n
  • 文档:测试是你代码的活生生的使用示例。
  • \n
\n\n

没有 C++ 测试的项目就像一座没有地基的房子。它看似矗立,但第一次“地震”(即需求变更)就会将其摧毁。

\n\n

C++ 测试工具:选择你的第一个框架

\n\n

对于 C++ 单元测试,有几个流行的框架。对于初学者,我推荐两个:Google Test (gtest) 和 Catch2。两者都是免费的,拥有出色的文档,并且易于集成。

\n\n

Google Test (gtest)

\n

行业标准。用于 Google、YouTube 和许多开源项目。功能强大,但需要一些配置。

\n\n

Catch2

\n

更轻量级,对初学者更“友好”。通过单个头文件即可集成。非常适合入门。

\n\n

在本文中,我们将使用 Catch2——它极简,能让你专注于核心内容,而不是配置。

\n\n

如何安装 Catch2 并编写第一个测试?

\n\n

安装 Catch2 很简单。从官方仓库下载单个头文件 catch.hpp,并将其放在你的项目文件夹中。无需 cmake、make 或链接。

\n\n

现在,让我们编写一个简单的 C++ 程序并对其进行测试。

\n\n

示例:加法函数

\n

创建文件 calculator.cpp:

\n\n
#include <iostream>\n#include "catch.hpp"\n\n// 要测试的函数\nint add(int a, int b) {\n    return a + b;\n}\n\n// 测试\nTEST_CASE("Addition works correctly", "[math]") {\n    REQUIRE(add(2, 3) == 5);\n    REQUIRE(add(-1, 1) == 0);\n    REQUIRE(add(0, 0) == 0);\n    REQUIRE(add(100, 200) == 300);\n}
\n\n

现在编译并运行:

\n\n
g++ -std=c++11 calculator.cpp -o calculator_test\n./calculator_test
\n\n

你会看到类似这样的输出:

\n\n
All tests passed (4 assertions in 1 test case)
\n\n

恭喜!你编写了你的第一个 C++ 单元测试。让我们分析一下这里发生了什么:

\n
    \n
  • TEST_CASE — 这是一个宏,用于创建一个测试场景。
  • \n
  • REQUIRE — 检查一个条件。如果条件为假,测试失败。
  • \n
  • "[math]" — 用于分组测试的标签。
  • \n
\n\n

实用建议:如何编写好的测试

\n\n

仅仅编写一个测试是不够的。你需要编写有用的测试。以下是一些规则,可以提升你的单元测试水平。

博客

书籍推荐